Переписать текстовый файл

Как переписать текстовый файл (в заданную позицию) и заблокировать его?

Для переписывания его нужно прочитать, а затем записать. - это легко - но мне нужно, чтобы файл был заблокирован для всех других процессов во всем процессе переписывания.

У меня есть метод.

    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;
    }
}
Другие вопросы по тегам