重写文本文件
ReWrite text file
如何重写文本文件(在指定位置)并锁定他?
rewrite需要先读后写。 - 这很容易 - 但我需要在整个重写过程中将 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);
有什么想法吗?我已经在第 2 晚处理了。
只需使用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))
{
}
这样,流就被正确处理了。目前,我在你的代码中没有看到你关闭流的任何地方(也许你在其他地方这样做,因为你已经在该方法之外声明了你的流......但是是的)。
试试这个:
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;
}
}
想到自己的Stream后,反汇编FileStream发现getter/setter位置
解决方案:
string precteno = sr.ReadToEnd();
precteno = stringModificator(precteno);
fs.Position = 3;
sw.Write(precteno);
如何重写文本文件(在指定位置)并锁定他?
rewrite需要先读后写。 - 这很容易 - 但我需要在整个重写过程中将 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);
有什么想法吗?我已经在第 2 晚处理了。
只需使用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))
{
}
这样,流就被正确处理了。目前,我在你的代码中没有看到你关闭流的任何地方(也许你在其他地方这样做,因为你已经在该方法之外声明了你的流......但是是的)。
试试这个:
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;
}
}
想到自己的Stream后,反汇编FileStream发现getter/setter位置
解决方案:
string precteno = sr.ReadToEnd();
precteno = stringModificator(precteno);
fs.Position = 3;
sw.Write(precteno);