.NET Core - 对一个文本文件进行多次 read/write 操作
.NET Core - Multiple read/write operations on a text file
多个read/write操作访问单个文件,而写操作时我面临这个问题
The process cannot access the file because it is being used in another process
使用它向文件添加文本
using (StreamWriter writer=System.IO.File.AppendText("wwwroot/Files/file.txt"))
{
writer.WriteLine(stringData.ToString());
writer.Close();
}
有没有办法对一个文件执行多次read/write?
谢谢
试试下面的代码。您可能不需要为此使用 StreamWriter
// To append text to file
System.IO.File.AppendAllText("FilePath", "TextToWrite");
// To read all text from file
string textFromFile = System.IO.File.ReadAllText("FilePath");
如果使用来自多个线程或写入同一文件的应用程序的相同代码,您可能会发现当一个线程正在连接时它发现该文件已在使用中。
错误消息的唯一原因是文件未关闭。
如果写入文件的调用是来自同一个应用程序的连续调用,则文件未正确关闭。
处理此问题的一种方法是检查锁定的文件并稍后重试。
像这样的东西可以用来检查文件是否打开:
public static bool CanBeOpenedForExclusiveRead(string filename)
{
try
{
// Test file for exclusive read/write
using (System.IO.FileStream fileStream = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.None))
{
fileStream.Close();
}
return true;
}
catch
{
}
return false;
}
如果你已经在使用像 NLog 这样的东西,那就是使用 nlog 来“记录”写入文件,nlog 将更好地跨线程处理这些问题。
多个read/write操作访问单个文件,而写操作时我面临这个问题
The process cannot access the file because it is being used in another process
使用它向文件添加文本
using (StreamWriter writer=System.IO.File.AppendText("wwwroot/Files/file.txt"))
{
writer.WriteLine(stringData.ToString());
writer.Close();
}
有没有办法对一个文件执行多次read/write?
谢谢
试试下面的代码。您可能不需要为此使用 StreamWriter
// To append text to file
System.IO.File.AppendAllText("FilePath", "TextToWrite");
// To read all text from file
string textFromFile = System.IO.File.ReadAllText("FilePath");
如果使用来自多个线程或写入同一文件的应用程序的相同代码,您可能会发现当一个线程正在连接时它发现该文件已在使用中。 错误消息的唯一原因是文件未关闭。
如果写入文件的调用是来自同一个应用程序的连续调用,则文件未正确关闭。
处理此问题的一种方法是检查锁定的文件并稍后重试。 像这样的东西可以用来检查文件是否打开:
public static bool CanBeOpenedForExclusiveRead(string filename)
{
try
{
// Test file for exclusive read/write
using (System.IO.FileStream fileStream = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.None))
{
fileStream.Close();
}
return true;
}
catch
{
}
return false;
}
如果你已经在使用像 NLog 这样的东西,那就是使用 nlog 来“记录”写入文件,nlog 将更好地跨线程处理这些问题。