2013-08-22 5 views
2

Я работаю над клоном блокнота, и у меня возникла проблема. Когда я пытаюсь написать текст в текстовом поле в файл, который я создаю я получаю исключение:«Не удается получить доступ к файлу» при записи в файл

Процесс не может получить доступ к файлу «C: \ Users \ opeyemi \ Documents \ b.txt» потому что он используется другим процессом.

Ниже приведен код, который я написал. Я был бы очень признателен за любые рекомендации относительно того, что я должен делать дальше.

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    SaveFileDialog TextFile = new SaveFileDialog(); 
    TextFile.ShowDialog(); 
    // this is the path of the file i wish to save 
    string path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),TextFile.FileName+".txt"); 
    if (!System.IO.File.Exists(path)) 
    { 
     System.IO.File.Create(path); 
     // i am trying to write the content of my textbox to the file i created 
     System.IO.StreamWriter textWriter = new System.IO.StreamWriter(path); 
     textWriter.Write(textEditor.Text); 
     textWriter.Close(); 
    } 
} 
+2

_ «я был бы очень признателен какие-либо рекомендации о том, что я должен делать дальше» _ - не открывая вопрос без поиска в Интернете за ошибку вы получаете. Вопрос о 'File.Create()', который блокирует файл, задается примерно каждые два дня здесь. – CodeCaster

+0

Возможный дубликат [Файл используется другим процессом после использования File.Create()] (http://stackoverflow.com/questions/2781357/file-being-used-by-another-process-after-using-file- create) – CodeCaster

ответ

5

Вы должны "защищать" ваш StremWriter использование (ичтения и запись) в using, как:

using (System.IO.StreamWriter textWriter = new System.IO.StreamWriter(path)) 
{ 
    textWriter.Write(textEditor.Text); 
} 

нет .Close() необходимости.

Вам не нужно System.IO.File.Create(path);, потому что StreamWriter создаст для вас файл (и Create() возвращает FileStream, который вы держите открытыми в вашем коде)

Технически вы можете:

File.WriteAllText(path, textEditor.Text); 

это все-в-одном и делает все (открывать, писать, закрывать)

Или если вы действительно хотите использовать StreamWriter и File.Create:

using (System.IO.StreamWriter textWriter = new System.IO.StreamWriter(System.IO.File.Create(path))) 
{ 
    textWriter.Write(textEditor.Text); 
} 

(есть StreamWriter конструктор, который принимает FileStream)

+0

Спасибо за совет. Сейчас он работает, но мне все равно хотелось бы знать, почему, когда я использовал .close, этого не произошло. Он также не работал, когда я попытался использовать инструкцию. – opeyemi

+0

@opeyemi Это: 'System.IO.File.Create (path);' создает файл и сохраняет его открытым. Вслед за этим: 'new System.IO.StreamWriter (path)', который создает файл и сохраняет его открытым. Вы видите проблему? Две инструкции пытаются открыть файл. 'File.Create' не« создает файл с нулевым байтом и закрывает его ». Это «создать файл и сохранить его открытым». Это не 'void Create (path)', это 'FileStream Create (путь)'. Технически вы можете иметь «File.Create (путь) .Close();», но это бесполезно. – xanatos

+0

Спасибо за помощь. – opeyemi

Смежные вопросы