如何重写文本文件(在指定位置)并锁定他?
对于重写,需要先阅读然后再编写。 - 这很容易 - 但我需要将make文件锁定到整个重写中的所有其他进程。
我有方法。
public bool AccessBridge()
{
try
{
fs = new FileStream("bridge.ini", FileMode.Open, FileAccess.ReadWrite);
sr = new StreamReader(fs);
sw = new StreamWriter(fs);
return true;
}
catch (IOException ioe)
{
return false;
}
}
然后另一个测试部分:
string precteno = sr.ReadToEnd();
//Some modify string
//now I need delete whole text from file
sw.Write(precteno);
有什么想法吗?第二天晚上我处理了它。
答案 0 :(得分:0)
只需使用FileShare.None
打开它:
fs = new FileStream("bridge.ini", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
顺便说一句......如果我是你,我会把这部分包裹在using
中:
using (var fs = new FileStream("bridge.ini", FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
}
这样,流被妥善处理掉了。目前,我没有在您的代码中看到您关闭流的任何地方(也许您已经在其他地方执行此操作,因为您已经在该方法之外声明了您的流...但是是的)。
答案 1 :(得分:0)
试试这个:
public bool AccessBridge()
{
try
{
fs = new FileStream("bridge.ini", FileMode.Open, FileAccess.ReadWrite);
sr = new StreamReader(fs);
string text = sr.ReadToEnd();
//do text modifications
//...
sw = new StreamWriter(fs, false);
sw. Write(text) ;
return true;
}
catch (IOException ioe)
{
return false;
}
}
答案 2 :(得分:0)
在想到自己的Stream之后,我反汇编了FileStream并发现了getter / setter Position。
解决方案:
string precteno = sr.ReadToEnd();
precteno = stringModificator(precteno);
fs.Position = 3;
sw.Write(precteno);