我有一個移動項目,用於監視患者的操作並將結果寫入文本文件。當我正在試驗輸出時,我只是讓文件保存在Debug文件夾中,這很好。但是,現在我創建了一個完整的目錄,用於創建或打開主文件夾,然後創建一個子文件夾(基於程序中的輸入文本),以將文本文件保存到。IO異常 - 正在被另一個進程使用的文件(在創建目錄後無法打開文件)
private void createDirectory()
{ //create output file in this folder using owner name and current date
//main folder path (contains all files output from system)
string rootDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Horse Monitoring Records";
//sub folder path (each patient has individual subfolder)
string subDirectory = rootDirectory + "\\" + txtPatName.Text + "-" + txtOwnerName.Text;
//file name (patient has file created for each operation)
fileName = subDirectory + "\\" + txtOwnerName.Text + "-" + DateTime.Now.Date.ToString("ddMMyyyy") + ".txt";
if (!Directory.Exists(rootDirectory)) //if main folder does not exist...
{
Directory.CreateDirectory(rootDirectory); //create it in My Documents
}
if (!Directory.Exists(subDirectory)) //if patient sub folder does not exist...
{
Directory.CreateDirectory(subDirectory); //create it in Patient-Owner format
}
if (!File.Exists(fileName)) //if monitoring file does not exist...
{
File.Create(fileName); //create it in Owner-Date format
}
}
這一階段工作正常,但只要你嘗試一些數據保存到文本文件,它拋出一個運行時錯誤,指出
文件無法訪問,因爲它是被另一個進程使用。
的異常長大這裏:
private void saveFileDetails()
{
//Once case details have been entered, create new file using these details and add data input structure
StreamWriter consoleFile = new StreamWriter(fileName);
...
}
當我去檢查了該文件夾,在相關子文件夾和文件已經被創建,但文本文件是空白的。 我猜這是在創建目錄後關閉文本文件,這意味着當系統嘗試打開它時它已經打開。我無法弄清楚如何排除這個問題!
上面所示的兩個函數的調用是這樣的:
private void btnStart_Click(object sender, EventArgs e)
{
...
//file details entered upon load written to new file - according to PatID
createDirectory();
saveFileDetails();
}
在哪裏何去何從任何建議將非常感謝!
謝謝, 馬克
如果在'File.Create(fileName)'之後立即寫入,操作系統可能尚未釋放該文件。不用檢查文件是否存在,你可以使用以FileXXXX枚舉參數爲參數的'StreamWriter'重載。 – cubrr
我的不好,你需要使用FileStream並將其傳遞給StreamWrifer。 – cubrr
您不需要將FileStream傳遞給StreamWriter。在傳遞文件路徑的構造函數中存在重載,如果該文件存在,則會打開文件,如果不存在,則會創建該文件。看到這裏:https://msdn.microsoft.com/en-us/library/fysy0a4b%28v=vs.100%29.aspx – Jauch