2012-12-13 97 views
2

因此,基本上我編寫了一個windows服務,它掃描zip文件的任何給定目錄,然後將其上傳到FTP服務器。我添加了一個跟蹤方法,假設寫入一個txt文件並保存所有內容的日誌。問題是當我鬆開服務到Windows我得到在事件查看器(我使用EventLog類添加中的LogEvent)返回嘗試使用FileStream和StreamWriter編寫LogFile的異常

System.IO.IOException一個錯誤信息:該進程無法訪問該文件 「 C:\ Windows \ system32 \ traceLog.txt「,因爲它正在被另一個 進程使用。

,做跟蹤代碼如下

private void EscribirTrace(string mensaje) 
    { 
     if (Tracing) 
     { 
      try 
      { 
       using (FileStream archivo2 = new FileStream(string.Format("{0}\\traceLog.txt", Environment.CurrentDirectory), FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) 
       { 
        mensaje = string.Format("{0} - {1} \r\n", DateTime.Now, mensaje); 

        StreamWriter writer = new StreamWriter(archivo2); 
        writer.WriteLine(mensaje); 
        writer.Flush(); 
        writer.Dispose(); 
       } 
      } 
      catch (Exception ex) 
      { 
       LogEvent("Error en escribir tracing", ex); 
      } 
     } 

    } 

任何想法,將不勝感激

編輯所以經過一番研究,我估計,那System32不在的最好的地方文件。我的意圖是讓路徑中的日誌文件是服務安裝的。經過一番研究,我更換了

Enviroment.CurrentDirectory 

Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().Location).Replace(
       Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location) 

格式化爲一個字符串。

其餘的只是工作得很好。

謝謝你的迴應!

+0

您的程序是否有權寫入system32?如果你把它寫到你的桌面上會發生什麼? – Ragnagord

回答

0

它是因爲你的使用語句還沒有發佈文件。你有它在蒸汽打開,所以你不能寫入它,直到你關閉你的流。

如果你想簡單地寫文本文件只需使用:

File.WriteAllText(FILEPATH, TEXTDATA); 

這個調用將會打開文件,寫微博,然後將其關閉。

0

如果它拋出的使用上...確保該文件中的所有其他流被正確關閉...

,如果它的使用是流作家的StreamWriter的構造

改變投與在構造函數中的新文件流

0

/Windows/system32需要管理員訪問。您的應用程序可能沒有運行正確的權限。您應該嘗試將日誌寫入不同的(限制較少的)位置。如果您需要寫入system32,請確保您的服務以管理員權限運行。