2011-06-28 97 views
0

假設我有一個連續的文本更新文本文件,我如何顯示在窗體(實時)的文本框中的內容?例如流文本文件到文本框c#

。這是log.txt文件的內容:

connected, bla bla bla 
disconnected, bla bla bla 

PS:我希望它顯示在Form1的textBox中(實時也是),所以每次文本文件有新的文本,該文本框顯示。任何想法,請幫助。謝謝。你也可以提供一個示例工作代碼。感謝

回答

1

使用FileSystemWatcher

使用MSDN上的例子(見上面的鏈接),你可以在事件處理程序添加到Changed事件 ,並從那裏更新您的文本。

0

只要您更新了文字,請致電Application.DoEvents();。但請注意,更新太頻繁可能會導致閃爍以及放慢整體處理速度。另請注意,如果任何繪圖/更新代碼再次導致更新/繪製(無限遞歸),則容易出錯。

編輯:讀一半的問題... 添加一個FileSystemWatcher監視日誌文件的更改。然而,這是一種非常無效的方法,並且取決於用於寫入日誌文件的設置,您可能缺少訪問權限和/或文件可能僅在應用程序關閉時更新。如果兩個進程都是您自己的代碼並且您可以修改它們,則應該考慮其他可能性(例如,可以使用某些telnet(或自定義)客戶端連接到的簡單「服務器」)。

0

插入一個RichTextBox和一個FilesystemWatcher,以及一個文本框或其他內容來存儲要顯示的文本文件的路徑和文件名。現在,轉到FilesystemWatcher_Changed(或其他所謂的)事件。在那裏,你把一個如果檢查,如果更改的文件是你想要顯示,然後RichTextBox.LoadFile(file)。 這是做什麼是監視fileystsem(硬盤或您指定的任何文件夾),並且每次文件已被調整時,它將檢查它是否是我們正在查看的文件。如果是,它將把文件重新加載到RichTextBox中。 不要忘記設置FilesystemWatcher的RaiseEvent和Path屬性。

例子:

string blaFile = "C:\TextFile.txt"; // The text file that we want to read. 

private void FilesystemWatcher_Changed(....).... // The FilesystemWatcher_Changed event notifies us when a file on the monitored path (FilesystemWatcher.Path) has changed. When a file has changed the code within this event gets executed. 
{ 
    if (e.File == blaFile) // We check if the file that has chenged, is the one we want. 
    { 
     RichTextBox.LoadFile(blaFile); // It is! We load it into the RichtextBox again so that it's "up-to-date"! 
    } 
} 

我不能完全肯定的e.File,因爲我沒有使用C#在一段時間了,但它是類似的東西。

+0

一個RTF控件可能有點矯枉過正。不要認爲這是值得的開銷,只是爲了節省寫入一些文件加載​​代碼。 – Mario

+0

您可以使用ReadFile函數或任何它被調用的函數。但我只是認爲RichtextBox會更容易達到這個目的:p – RobinJ

+0

我會在if語句中放什麼?我沒有明白。對不起 – Lufthansa

-1

建議不要使用文本文件,因爲有兩個進程來訪問文件,並且需要實時更新。

嘗試使用NamePipeServerStream和NamePipeClientStream進行兩個進程的內存共享。