2013-03-09 70 views
0

我正在使用StreamWriter寫入文件。我使用的是「使用」,所以它應該自動關閉,但是當我嘗試保存(寫入文件)時,它會給我「無法訪問文件,因爲另一個進程正在使用它」錯誤。我似乎無法弄清楚它給我這個錯誤的地方或原因。這是我的代碼文件無法使用,因爲另一個進程正在使用它 - 無法找到打開的流

[WebMethod] 
    public static bool saveToCSV(string[] valueArray) 
    { 
     bool saveOK = false; 

     try 
     { 
      string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 

      using (StreamWriter sw = new StreamWriter(filepath + "\\spreadsheet.csv", false)) 
      { 

       foreach (var i in valueArray) 
       { 
        if (i.ToString() == "\n") 
        { 
         sw.Write(sw.NewLine); 
        } 
        else 
        { 
         { 
          if (i.ToString() == "") 
          { 
           sw.Write(" "); 
           sw.Write(","); 
          } 
          else 
          { 
           sw.Write(i.ToString()); 
           sw.Write(","); 
          } 
         } 
        } 
       } 
       sw.Flush(); 
      }//close using 

      saveOK = true; 
     } 
     catch (Exception ex) 
     { 
      saveOK = false; 
     } 

     return saveOK; 
    } 
+0

嘗試運行[Handle.exe](http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx)以查看哪個進程阻止資源。 – 2013-03-09 01:34:18

+0

代碼看起來很好,除了你在這一行有另外一組''}'但是不應該傷害代碼' 「」) { sw.Write(「」); sw.Write(「,」); } else { sw.Write(i.ToString()); sw.Write(「,」); } }' – MethodMan 2013-03-09 01:35:28

+0

查看您的所有代碼,看看您是否正在爲此創建另一個StreamWriter或StreamReader實例。 – MethodMan 2013-03-09 01:36:22

回答

2

該代碼看起來沒問題。

你還在哪裏處理文件?所有其他文件IO操作是否包含在using塊中?還有哪些應用程序可能會觸及該文件?

如果您在其他地方打開文件並且未處理該流,或者其他應用程序打開了該文件,您將得到此異常。

+1

mm。現在你提到它了,我查看了我的「打開文件」方法,並且看到在閱讀完之後我從未關閉過流。我現在感覺很傻。 – user1084319 2013-03-09 01:36:40

1

這裏可能發生什麼是您的saveToCSV方法被同時調用兩次。基本上兩個客戶端同時調用Web服務。這可能會導致第一個電話打開文件並因此第二個電話被拒絕訪問的情況。

爲了防止這一點,你應該使用一個鎖,如果同時出現多個客戶端調用規範對文件的訪問

private static object _key = new object(); 

[WebMethod] 
public static bool saveToCSV(string[] valueArray) 
{ 
    ... 
    lock (_key) { 
    using (StreamWriter sw = new StreamWriter(filePath + "\\spreadsheet.csv")) { 
     ... 
    } 
    } 
} 

現在,他們將只嘗試一次

訪問該文件的一個
+0

非常感謝您的意見。實際發生的是,在我的「openCSV」方法中,我從來沒有關閉過流:(但這是一個非常有趣的讀法 – user1084319 2013-03-09 02:34:13

相關問題