如何锁定文件,读取其内容并覆盖它?
问题描述:
我需要读取文件的内容并在文件锁定时覆盖它。我不希望文件在读取和写入操作之间解锁。如何锁定文件,读取其内容并覆盖它?
using (var file = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
using (var reader = new StreamReader(file, Encoding.Unicode))
using (var writer = new StreamWriter(file, Encoding.Unicode))
{
// read
// calculate new content
// overwrite - how do I do this???
}
}
如果我用两个FileStream
S,实例作家当文件被清除,但该文件将读者和作家之间的实例进行简要解锁。
using (var reader = new StreamReader(new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None)))
{
// read
// calculate new content
}
using (var writer = new StreamWriter(new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)))
{
// write
}
答
如果你把开原的FileStream你可以做到这一点:
using (var file = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
// This overload will leave the underlying stream open
using (var reader = new StreamReader(file, Encoding.Unicode, true, 4096, true))
{
//Read
}
file.SetLength(0); //Truncate the file and seek to 0
using (var writer = new StreamWriter(file, Encoding.Unicode))
{
//Write the new data
}
}
这需要在V4.5的依赖,因为与leaveOpen的构造函数是不是之前它用。 –
感谢您的快速回答! –
没有理由使用新的'leaveOpen'参数来解决这个问题。打开文件作为读/写就足够了。读取器和写入器都可以同时创建,并且在读取之后但在写入之前设置基础流长度。 –