Переписать текстовый файл
Как переписать текстовый файл (в заданную позицию) и заблокировать его?
Для переписывания его нужно прочитать, а затем записать. - это легко - но мне нужно, чтобы файл был заблокирован для всех других процессов во всем процессе переписывания.
У меня есть метод.
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 ночи.
3 ответа
После идеи собственного потока я разобрал FileStream и обнаружил позицию getter/setter.
Решение:
string precteno = sr.ReadToEnd();
precteno = stringModificator(precteno);
fs.Position = 3;
sw.Write(precteno);
Просто используйте 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;
}
}