重写文本文件

时间:2015-11-19 02:32:15

标签: c# filestream streamreader streamwriter

如何重写文本文件(在指定位置)并锁定他?

对于重写,需要先阅读然后再编写。 - 这很容易 - 但我需要将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);

有什么想法吗?第二天晚上我处理了它。

3 个答案:

答案 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);