2013-05-27 44 views
0

我已經編寫了一個簡單的Windows服務來監視文件夾,並在任何到達的文件上運行relog(從二進制perf mon文件導出數據的窗口工具)。如果從C#執行,Relog無法打開二進制日誌文件

當我從我的C#程序運行(使用System.Diagnostics.Process.Start())我得到:

Error: 
Unable to open the specified log file. 

但是,如果我複製並粘貼到命令控制檯窗口,它工作正常。

我已經看遍了整個網絡,但一切似乎指向一個損壞的文件,我知道不是這種情況,因爲我可以在手動運行時完美導入。

任何幫助非常感謝。

+0

是您的命令使用relog可執行文件的完整路徑嗎? 如果你在這裏放置你的代碼實際上啓動exe文件,這將是很好的。 – anderhil

+0

否 - 但我知道relog正在啓動,因爲輸出是重新登錄格式。問題不在於我無法重新登錄,而是因爲某些原因重新登錄無法打開文件。 – BlackSpy

回答

0

如果您使用FileSystemWatcher監視文件,它會在文件完全寫入磁盤之前觸發創建的事件,這會導致重新記錄無法「打開」文件的錯誤類型,因爲它可能仍然存在被鎖定,並在技術上腐敗至關重要。

我已經寫了下面的輔助方法,我總是與FileSystemWatcher的結合使用,以等待文件被完全寫入,並準備處理創建的事件之後並在超時後也將踢出:

public static bool WaitForFileLock(string path, int timeInSeconds) 
{ 
    bool fileReady = false; 
    int num = 0; 

    while (!fileReady) 
    { 
    if (!File.Exists(path)) 
    { 
     return false; 
    } 

    try 
    { 
     using (File.OpenRead(path)) 
     { 
     fileReady = true; 
     } 
    } 
    catch (Exception) 
    {   
     num++; 
     if (num >= timeInSeconds) 
     { 
     fileReady = false; 
     } 
     else 
     { 
     Thread.Sleep(1000); 
     } 
    } 
    } 

    return fileReady; 
} 
+0

你是男人,男人。就是這樣 - 文件流仍在寫入。好一個! – BlackSpy

相關問題