проблемы с файловым потоком, потоковым ридером и потоковым писателем - PullRequest
1 голос
/ 07 октября 2011

моя первая проблема возникает в том случае, если я объявляю свой файловый поток и т. Д. Таким образом

filestream file;
streamreader file_in;
streamwriter file_out;

try
{
    file = new filestream("data.txt", FileMode.OpenOrCreate);
    file_in = new streamreader(file);
    file_out = new streamwriter(file);
}
catch(IOException exc)
{
    Console.WriteLine(exc.Message);
}

выдает ошибку, которая говорит «использование неназначенной локальной переменной», что я нахожу странным, потому что все потокиобъявлен вне блока try, но внутри основного, поэтому они должны существовать внутри основного.

Моя другая проблема возникает в том, что если я удаляю блок try / catch и просто объявляю потоки одной строкой (например,: FileStream file = new FileStream("data.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);) мое чтение из файла работает, однако я не могу записать в файл.Моя функция записи в файл выглядит следующим образом:

    public bool write_to_file(ref StreamWriter file_out)
    {
        if (this.is_empty == true)
        {
            Console.WriteLine("error, there is nothing to write.");
            Console.WriteLine("press any key to continue...");
            Console.ReadKey();
            return false;
        }

        try
        {
            string temp = this.is_empty + "," + this.movie_title + "," + this.year_released + "," + this.publisher + "," +
                this.length + "," + this.acting_rating + "," + this.music_rating + "," + this.cinematography_rating + "," +
                this.plot_rating + "," + this.duration_rating + "," + this.total_rating;
            file_out.WriteLine(temp);
            return true;
        }
        catch (IOException exc)
        {
            Console.WriteLine(exc.Message);
            Console.WriteLine("press any key to continue...");
            Console.ReadKey();
            return false;
        }
    }

любая помощь будет высоко ценится, спасибо.

Ответы [ 3 ]

4 голосов
/ 07 октября 2011

Ну, они объявлены, но не назначены ... так что, либо установите их в null, либо просто сделайте все вместе.

try
{
    using(var file = new FileStream("data.txt", FileMode.OpenOrCreate))
    using(var file_in = new StreamReader(file))
    using(var file_out = new StreamWriter(file))
    {
        // Do your thing
    }
}
catch
{
    throw;
}
3 голосов
/ 07 октября 2011

Вам необходимо присвоить значение вашим переменным в верхней части, даже если оно просто равно нулю

FileStream   file     = null;
StreamReader file_in  = null;
StreamWriter file_out = null;
0 голосов
/ 07 октября 2011

Перед закрытием файлов попробуйте очистить выходные потоки и файлы.

 file_out.Flush();
 file.Flush(); // may be redundant but won't hurt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...