Использование file.Close() с StreamWriter

У меня проблемы с использованием файла. Закрыть с помощью StreamWriter в этом методе, похоже, ему это не нравится. Может ли кто-нибудь продемонстрировать, как это можно сделать. (Причина этого в том, что другой метод обращается к используемому файлу и, следовательно, не может, потому что файл все еще используется другим методом.)

Код пока:

private static void TrimColon()
{
    using (StreamWriter sw = File.AppendText(@"process_trimmed.lst"))
    {
        StreamReader sr = new StreamReader(@"process_trim.lst");
        string myString = "";
        while (!sr.EndOfStream)
        {

            myString = sr.ReadLine();
            int index = myString.LastIndexOf(":");
            if (index > 0)
                myString = myString.Substring(0, index);

            sw.WriteLine(myString);
        }
    }
}

person Ben    schedule 18.06.2011    source источник
comment
Вам также следует закрыть StreamReader.   -  person Ivan Danilov    schedule 18.06.2011
comment
Эм, где это? Вы забыли обернуть StreamReader оператором using. Файл остается открытым.   -  person Hans Passant    schedule 18.06.2011
comment
@Hans Passant Не могли бы вы продемонстрировать, пожалуйста?   -  person Ben    schedule 18.06.2011


Ответы (2)


StreamWriter закрывается, а также сбрасывается из-за оператора «using». Так что не нужно звонить близко.

person Hasan Fahim    schedule 18.06.2011
comment
Я запутался, Иван Данилов утверждает, что он не закрыт, и Ханс Пассант, кажется, тоже так думает. - person Ben; 18.06.2011
comment
@Бен. Ваш StreamWriter закрывается и сбрасывается, поскольку он находится в операторе использования. Но StreamReader не закрыт. Следовательно, поместите это также в оператор using. - person Hasan Fahim; 18.06.2011

person    schedule
comment
@myermian Итак, я бы назвал TrimColon так: TrimColon(input.txt,output.txt) ?? - person Ben; 18.06.2011
comment
Ну, в твоем случае TrimColon(@"process_trim.lst", @"process_trimmed.lst"); - person myermian; 18.06.2011
comment
@myermian По какой-то причине приведенный выше код не создает автоматически process_trimmed.lst, он должен существовать: S - person Ben; 18.06.2011
comment
Потому что File.AppendText требует, чтобы файл уже существовал. Если вы работаете с именем файла, которого может не быть... Я обновлю код. - person myermian; 18.06.2011
comment
@myermian Да, файл не существует, поэтому выдается исключение - person Ben; 18.06.2011
comment
@Ben: я беру свои слова обратно, File.AppendText не требует существования файла. Вы уверены, что другой файл существует? - person myermian; 18.06.2011
comment
@myermian Плохо, некоторые опечатки в коде, также у вас есть некоторые опечатки: String.IsNullOrWhiteSpace(outputFilePath)) Спасибо за помощь :D! - person Ben; 18.06.2011
comment
Я также изменил его на File.OpenText, чтобы было более понятно, каково намерение. - person myermian; 18.06.2011