Не могу записать в файл после прочтения - PullRequest
2 голосов
/ 15 июля 2011

В следующем коде я получаю сообщение об ошибке " поток не был доступен для записи ":

class Class1
{
    private static void Main()
    {
        FileStream fs = new FileStream("C:\\fFile.txt", 
                              FileMode.OpenOrCreate, 
                              FileAccess.ReadWrite, 
                              FileShare.ReadWrite);

        StreamReader r = new StreamReader(fs);
        string t = r.ReadLine();
        r.Close();
        Console.WriteLine(t);

        StreamWriter w = new StreamWriter(fs);
        w.WriteLine("string");
        w.Flush();
        w.Close();
        fs.Close();

    }
}    

Ошибка в этой строке StreamWriter w = new StreamWriter(fs);

Почему это?

Ответы [ 5 ]

3 голосов
/ 15 июля 2011

из MSDN

Closes the StreamReader object and the underlying stream, and releases any system resources associated with the reader.

Итак, поток, в который вы пытаетесь записать, является недействительным, вам нужно открыть его снова и открыть файл.

2 голосов
/ 15 июля 2011
r.Close(); 

Есть ваша проблема после того, как вы прочитали.Методы close () закрывают основной поток.

1 голос
/ 15 июля 2011

Вам придется заново открыть файл, так как чтение закрывает его:

FileStream fs = new FileStream("C:\\test.txt", 
                        FileMode.OpenOrCreate, 
                        FileAccess.ReadWrite, 
                        FileShare.ReadWrite);
using (StreamReader r = new StreamReader(fs))
{
    string t = r.ReadLine();
    r.Close();
    Console.WriteLine(t);
}

fs = new FileStream("C:\\test.txt", 
            FileMode.OpenOrCreate, 
            FileAccess.ReadWrite, 
            FileShare.ReadWrite);

using (StreamWriter w = new StreamWriter(fs))
{
    w.WriteLine("string");
    w.Flush();
    w.Close();
}
fs.Close();
0 голосов
/ 15 июля 2011

Не закрывайте StreamReader.Просто прокомментируйте строку ниже, и она будет работать.

 r.Close();
0 голосов
/ 15 июля 2011

Не закрывайте первый StreamWriter, он закроет основной поток.И используйте использование утверждений, как предлагает Оскар.

using (FileStream fs = new FileStream("C:\\temp\\fFile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
    StreamReader r = new StreamReader(fs);
    string t = r.ReadLine();

    Console.WriteLine(t);

    StreamWriter w = new StreamWriter(fs);
    w.WriteLine("string");
    w.Close();
    r.Close();
    fs.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...