2013-03-31 4 views
0
System.IO.File.CreateText(@"C:\\ProgramData\\Password Manager\\pwd.dat"); 

Это делает файл отлично.C# Файл используется Другая программа

System.IO.File.WriteAllLines(@"C:\\ProgramData\\Password Manager\\pwd.dat", pwd); 

Но эта линия получает ошибку

"Процесс не может получить доступ к файлу. 'C: \ ProgramData \ Password Manager \ pwd.dat', так как он используется другим процессом"

Есть ли способ закрыть файл перед записью на него?

+1

Вы 'Close' и/или' Dispose' результат ['CreateText'] (http://msdn.microsoft.com/en-us/library/system.io.file.createtext.aspx)? Почему вы сначала называете «CreateText»? ['WriteAllLines'] (http://msdn.microsoft.com/en-us/library/system.io.file.writealllines.aspx) документируется как * Создает новый файл ... * –

+0

Просто исправил его. Поскольку я не установил файл как переменную. У меня не было возможности закрыть его. Просто сделал его переменной, закрыл его, чем он сработал! – Dobz

ответ

5

Вам не нужно использовать CreateText. Просто позвоните WriteAllLines, и это создаст файл для вас. В настоящий момент поток, возвращаемый CreateText, удерживает файл, созданный, из-за которого возникает ошибка.

+0

Спасибо! Работал Perfecty! :) – Dobz

4

File.CreateText не только создает файл, но и открывает его и возвращает поток для записи файла.
Ваш последующий вызов находит файл заблокирован самостоятельно

Попробуйте

StreamWriter sw = File.CreateText(@"C:\\ProgramData\\Password Manager\\pwd.dat"); 
sw.Close(); 
sw.Dispose(); 

или просто

using(File.CreateText(@"C:\\ProgramData\\Password Manager\\pwd.dat")) {} 

(using statement заботится, чтобы закрыть и утилизировать файл)

однако, это совершенно необязательно, если вы видите свой код, потому что File.WriteAllLines создает файл, если он не существует.

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