在路径上共享冲突错误C# [英] Sharing Violation on Path Error C#

查看:221
本文介绍了在路径上共享冲突错误C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

  public static TextWriter twLog = null; 
private int fileNo = 1;
private string line = null;

TextReader tr = new StreamReader(file_no.txt);
TextWriter tw = new StreamWriter(file_no.txt);
line = tr.ReadLine();
if(line!= null){
fileNo = int.Parse(line);
twLog = new StreamWriter(log_+ line +.txt);
} else {
twLog = new StreamWriter(log_+ fileNo.toString()+.txt);

System.IO.File.WriteAllText(file_no.txt,string.Empty);
tw.WriteLine((fileNo ++)。ToString());
tr.Close();
tw.Close();
twLog.Close();

我想要做的只是打开一个名为log_x.txt的文件, xfrom file_no.txt file.If file_no.txt file is empty make log name's log_1.txt and writefileNo +1to file_no.txt.After a new program starts after the new program file name must be log_2.txt。但是我得到这个错误,我不明白我在做什么错。感谢您的帮助。

解决方案

您正在尝试打开文件 file_no.txt 阅读以使用单独的流进行书写。这可能无法正常工作,因为文件将被阅读流锁定,所以写入流不能被创建,你会得到异常。



一个解决方案是先读取文件,关闭流,然后在增加 fileNo 之后写入文件。这种方式一次只打开一次文件。

另一种方式是创建一个文件流,以读取和写入访问像这样:

  FileStream fileStream = new FileStream(@file_no.txt,
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);

接受的答案是

可能的备用解决方案

我知道您希望在程序启动时创建唯一的日志文件。另一种方法是这样的:
$ b $ pre $ int logFileNo = 1;
string fileName = String.Format(log_ {0} .txt,logFileNo);

while(File.Exists(fileName))
{
logFileNo ++;
fileName = String.Format(log_ {0} .txt,logFileNo);



$ b $ p
$ b

这个数字会增加,直到找到一个文件号码,不存在。缺点:如果你有 log_1.txt log_5.txt ,下一个文件不会是 log_6.txt 但是 log_2.txt 。为了解决这个问题,你可以用掩码 log _ *。txt 来枚举你目录下的所有文件,并找到通过执行一些字符串操作最大的数字。

可能性是无止境的:-D


Here is my code:

public static TextWriter twLog = null;
private int fileNo = 1;
private string line = null;

TextReader tr = new StreamReader("file_no.txt");
TextWriter tw = new StreamWriter("file_no.txt");
line = tr.ReadLine();
if(line != null){
    fileNo = int.Parse(line);
    twLog = new StreamWriter("log_" + line + ".txt");
}else{
    twLog = new StreamWriter("log_" + fileNo.toString() + ".txt");  
}
System.IO.File.WriteAllText("file_no.txt",string.Empty);
tw.WriteLine((fileNo++).ToString());
tr.Close();
tw.Close();
twLog.Close();

What i'm trying to do is just open a file with log_x.txt name and take the "x" from file_no.txt file.If file_no.txt file is empty make log file's name log_1.txt and write "fileNo + 1" to file_no.txt.After a new program starts the new log file name must be log_2.txt.But i'm getting this error and i couldn't understand what am i doing wrong.Thanks for help.

解决方案

Well, you're trying to open the file file_no.txt for reading and for writing using separate streams. This may not work as the file will be locked by the reading stream, so the writing stream can't be created and you get the exception.

One solution would be to read the file first, close the stream and then write the file after increasing the fileNo. That way the file is only opened once at a time.

Another way would be to create a file stream for both read and write access like that:

FileStream fileStream = new FileStream(@"file_no.txt", 
                                       FileMode.OpenOrCreate, 
                                       FileAccess.ReadWrite, 
                                       FileShare.None);

The accepted answer to this question seems to have a good solution also, even though I assume you do not want to allow shared reads.

Possible alternate solution
I understand you want to create unique log files when your program starts. Another way to do so would be this:

int logFileNo = 1;
string fileName = String.Format("log_{0}.txt", logFileNo);

while (File.Exists(fileName))
{
    logFileNo++;
    fileName = String.Format("log_{0}.txt", logFileNo);
}

This increases the number until it finds a file number where the log file doesn't exist. Drawback: If you have log_1.txt and log_5.txt, the next file won't be log_6.txt but log_2.txt.

To overcome this, you could enumerate all the files in your directory with mask log_*.txt and find the greatest number by performing some string manipulation.

The possibilities are endless :-D

这篇关于在路径上共享冲突错误C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆