2012-09-17 76 views
0

我無法在c#web服務代碼中創建文件後立即打開文件。 該目錄最初不存在。所以程序創建目錄和文件。然後嘗試打開文件以寫入一行。但它無法打開文件。錯誤是該文件在另一個進程中打開。剛剛從webservice創建文本文件後無法打開文本文件

我試圖從Windows資源管理器中打開文件。該文件打開,但錯誤消息仍在。 我試圖刪除文件夾C:\測試,它說,文件是打開是WebDev.WebDevServer40.exe

任何幫助,請。

[WebMethod] 
    public string saveFileUploaderName(string name) 
    { 
     string path = "c:\\Test"; 
     string filename = "Test.txt"; 
     string completeFileName = Path.Combine(path,filename); 
     if(!File.Exists(completeFileName)) 
     { 
      Directory.CreateDirectory(path); 
      File.Create(completeFileName); 
     } 
     StreamWriter writer = File.AppendText(completeFileName); 
     writer.WriteLine(name); 
     writer.Flush(); 
     writer.Close(); 
return "success"; 
} 
+0

爲什麼你要打開的服務器上的文本文件?最佳做法是鎖定服務器上基於文件的訪問權限,特別是像w3wp這樣的進程。你可以使用數據庫嗎? –

+0

謝謝。我實際上在做一個課堂作業。這個問題讓我從Web服務寫入文本文件。 – crazyTechie

+0

爲什麼你需要單獨創建文件?如果您以追加模式創建StreamWriter,它將爲您創建一個,如果它尚未存在。 – Typist

回答

2

File.Create返回一個流,但你放棄它。 所以(我想!)你要麼需要使用返回的流,要麼在試圖打開一個新的流到同一個文件之前明確地關閉它。

1

您需要關閉文件,請嘗試:

File.Create(completeFileName).Close(); 
0

使用File.AppendAllText代替。

這將創建文件,如果它不存在。

您的代碼將是簡單的

[WebMethod] 
public string saveFileUploaderName(string name) 
{ 
    string path = "c:\\Test"; 
    string filename = "Test.txt"; 
    string completeFileName = Path.Combine(path,filename); 
    File.AppendAllText(completeFileName, name); 
    return "success"; 
}