Tôi đang tạo một chương trình điều khiển máy chủ trò chơi. Một trong những chức năng mà tôi đang tạo ra là một màn hình logfile server trực tiếp.Cách giám sát Textfile và nội dung đầu ra liên tục trong một hộp văn bản
Có tệp nhật ký (một tệp văn bản đơn giản) được máy chủ cập nhật khi máy chủ chạy.
Làm cách nào để liên tục kiểm tra tệp nhật ký và xuất nội dung của nó trong RichTextBox?
Tôi đã thực hiện chức năng đơn giản này chỉ cần thử và lấy nội dung của nhật ký. Tất nhiên, nó sẽ chỉ nhận được hàng văn bản theo hàng và xuất nó vào hộp văn bản của tôi. Ngoài ra nó sẽ khóa chương trình miễn là vòng lặp chạy, vì vậy tôi biết nó vô dụng.
public void ReadLog()
{
using (StreamReader reader = new StreamReader("server.log"))
{
String line;
// Read and display lines from the file until the end of the file is reached.
while ((line = reader.ReadLine()) != null)
{
monitorTextBox.AppendText(line + "\n");
CursorDown();
}
}
}
Nhưng làm thế nào bạn sẽ giải quyết việc theo dõi trực tiếp đơn giản nhất có thể?
* EDIT *
Tôi đang sử dụng giải pháp Prescots. công cụ tuyệt vời.
Hiện tại tôi đang sử dụng trình tạo sstreamreader để đặt văn bản từ tệp vào hộp văn bản của mình. Tôi chạy vào vấn đề là, bất cứ khi nào tôi cố gắng truy cập bất kỳ điều khiển gui trong trình xử lý sự kiện của tôi, chương trình chỉ dừng lại mà không có lỗi hoặc cảnh báo.
Tôi phát hiện ra rằng nó có liên quan đến luồng. Tôi đã giải quyết như sau:
private void OnChanged(object source, FileSystemEventArgs e)
{
if (monitorTextField.InvokeRequired)
{
monitorTextField.Invoke((MethodInvoker)delegate { OnChanged(source, e); });
}
else
{
StreamReader reader = new StreamReader("file.txt");
monitorTextField.Text = "";
monitorTextField.Text = reader.ReadToEnd();
reader.Close();
CursorDown();
}
}
Vấn đề duy nhất của tôi là tệp tin.txt được máy chủ sử dụng để tôi không thể truy cập vì nó đang được sử dụng bởi một quy trình khác ". Tôi không thể kiểm soát quá trình đó .. vì vậy có lẽ tôi không may mắn.
Nhưng tệp có thể được mở trong notepad trong khi serevr đang chạy, do đó, bằng cách nào đó nó phải có thể. Có lẽ tôi có thể làm một bản sao tạm thời của tập tin khi nó cập nhật và đọc bản sao. Dunno ...
sử dụng bộ hẹn giờ ... và kiểm tra mỗi 10 giây hoặc 5 giây ... – SolidSnake