Завершение работы программы приводит к сбоям в работе StreamWriter

Я работаю над небольшой программой ATM, и я застрял на проблеме StreamWritter. При загрузке моя программа должна использовать StreamReader для чтения 4 файлов .txt, расположенных в моем bin/debug. Затем пользователю предлагается либо внести, либо снять деньги с банковских счетов, расположенных в файлах .txt. Все отлично работает для StreamReader, который загружает все банковские счета при загрузке программы, и для StreamWriter, чтобы записывать изменения в файлы .txt, когда я добавляю/удаляю деньги. Моя проблема в том, что когда я закрываю программу, загрузка файлов работает нормально, но я больше не могу писать в файлы. Мой StreamWriter переходит прямо к части Catch и не может быть создан. Как это возможно, если он работал нормально при первом использовании. Вот код StreamReader:

    public bool ReadSavingAccount()
    {
        string strLine;
        string[] strArray;
        char[] charArray = new char[] { ',' };
        FileStream aFile;
        StreamReader sr;
        try
        {
            aFile = new FileStream("mySavingAccount.txt", FileMode.Open);
            sr = new StreamReader(aFile);

            strLine = sr.ReadLine();
            while (strLine != null)
            {
                strArray = strLine.Split(charArray);
                Savings monSave = new Savings(strArray[0], Convert.ToDouble(strArray[1]));
                mySavingAccount.Add(monSave);
                strLine = sr.ReadLine();
            }
            sr.Close();
            aFile.Close();
        }
        catch
        {
            return false;
        }

        return true;
    }

И код StreamWrite:

    public bool WriteSavingAccount()
    {
        FileStream aFile;
        StreamWriter sw;
        string myString;

        try
        {
            aFile = new FileStream("mySavingAccount.txt", FileMode.Create);
            sw = new StreamWriter(aFile);
        }
        catch
        {
            return false;
        }

        foreach (Savings mySave in mySavingAccount)
        {
            myString = mySave.AccountNumber + "," + mySave.AccountBalance;
            sw.WriteLine(myString);

        }
        sw.Close();
        return true;
    }

Есть идеи, в чем может быть проблема? Заранее спасибо и дайте мне знать, если вам нужны какие-либо другие части кода.


person Neequo    schedule 12.12.2011    source источник
comment
Какое исключение вы получаете?   -  person Sebastian Piu    schedule 12.12.2011
comment
Если в методе ReadSavingAccount() прямо к части Catch без закрытия потокового считывателя, конечно, метод записи также получил исключение.   -  person Reza ArabQaeni    schedule 13.12.2011
comment
Никогда не используйте catch{return false;}. Это полностью лишает вас возможности узнать, что было исключением. Просто полностью избавьтесь от try/catch.   -  person John Saunders    schedule 13.12.2011
comment
Вы закрываете файловый поток «aFile» в своем writeSavingsAccount?   -  person tbddeveloper    schedule 13.12.2011
comment
также почему вы не избавляетесь от созданных объектов.. рассматривали ли вы возможность fstreamSavingsAccount = new FileStream(fstreamSavingsAccount.ToString(), FileMode.Open, FileAccess.Read); Я бы попробовал избавиться от объектов и попробовать это   -  person MethodMan    schedule 13.12.2011
comment
Мне также интересно, если вы получаете сообщение об уже используемом файле, попробуйте написать в своей попытке catch Try{}catch (IOException ioEx) { console.WriteLine(ioEx.Message) или какой-нибудь файл журнала, где вы можете зафиксировать фактическую ошибку   -  person MethodMan    schedule 13.12.2011


Ответы (2)


Попробуйте добавить второй параметр логического значения к вашему вызову StreamWriter. Это дополнительный параметр. Значение true для добавления в файл, значение false для его перезаписи.

sw = new StreamWriter(aFile, false);
person Lost in Alabama    schedule 12.12.2011

Создайте свой StreamWriter в операторе using, чтобы убедиться, что он правильно закрыт.

person Christoph    schedule 12.12.2011