该进程无法访问该文件,因为它正由另一个进程使用(文件已创建但不包含任何内容)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了该进程无法访问该文件,因为它正由另一个进程使用(文件已创建但不包含任何内容)相关的知识,希望对你有一定的参考价值。
using System.IO;
class test
{
public static void Main()
{
string path=@"c:\mytext.txt";
if(File.Exists(path))
{
File.Delete(path);
}
FileStream fs=new FileStream(path,FileMode.OpenOrCreate);
StreamWriter str=new StreamWriter(fs);
str.BaseStream.Seek(0,SeekOrigin.End);
str.Write("mytext.txt.........................");
str.WriteLine(DateTime.Now.ToLongTimeString()+" "+DateTime.Now.ToLongDateString());
string addtext="this line is added"+Environment.NewLine;
File.AppendAllText(path,addtext); //Exception occurrs ??????????
string readtext=File.ReadAllText(path);
Console.WriteLine(readtext);
str.Flush();
str.Close();
Console.ReadKey();
//System.IO.IOException: The process cannot access the file 'c:\mytext.txt' because it is //being used by another process.
// at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
}
}
答案
试试这个
string path = @"c:\mytext.txt";
if (File.Exists(path))
{
File.Delete(path);
}
{ // Consider File Operation 1
FileStream fs = new FileStream(path, FileMode.OpenOrCreate);
StreamWriter str = new StreamWriter(fs);
str.BaseStream.Seek(0, SeekOrigin.End);
str.Write("mytext.txt.........................");
str.WriteLine(DateTime.Now.ToLongTimeString() + " " +
DateTime.Now.ToLongDateString());
string addtext = "this line is added" + Environment.NewLine;
str.Flush();
str.Close();
fs.Close();
// Close the Stream then Individually you can access the file.
}
File.AppendAllText(path, addtext); // File Operation 2
string readtext = File.ReadAllText(path); // File Operation 3
Console.WriteLine(readtext);
在每个文件操作中,文件将被打开,并且必须在打开之前关闭。在操作1中,您必须关闭文件流以进行进一步操作。
另一答案
您在关闭文件流之前写入文件:
using(FileStream fs=new FileStream(path,FileMode.OpenOrCreate))
using (StreamWriter str=new StreamWriter(fs))
{
str.BaseStream.Seek(0,SeekOrigin.End);
str.Write("mytext.txt.........................");
str.WriteLine(DateTime.Now.ToLongTimeString()+" "+DateTime.Now.ToLongDateString());
string addtext="this line is added"+Environment.NewLine;
str.Flush();
}
File.AppendAllText(path,addtext); //Exception occurrs ??????????
string readtext=File.ReadAllText(path);
Console.WriteLine(readtext);
上面的代码应该可以使用您当前使用的方法。您还应该查看using
语句并将您的流包装在using块中。
另一答案
File.AppendAllText
不知道您打开的流,因此将在内部尝试再次打开该文件。因为您的流阻止访问该文件,File.AppendAllText
将失败,抛出您看到的异常。
我建议您使用str.Write
或str.WriteLine
,因为您已在代码中的其他地方使用过。
您的文件已创建但不包含任何内容,因为在调用str.Flush()
和str.Close()
之前会抛出异常。
另一答案
using (var fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
using (var sw = new StreamWriter(fs))
{
sw.WriteLine(message);
}
以上是关于该进程无法访问该文件,因为它正由另一个进程使用(文件已创建但不包含任何内容)的主要内容,如果未能解决你的问题,请参考以下文章
c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件
FileStram文件正由另一进程使用,该进程无法访问该文件,解决方法
c# 读写文件时文件正由另一进程使用,因此该进程无法访问该文件