Tôi nhận thấy rằng nó sẽ tiếp tục trả về cùng một ký tự đọc nhiều lần, nhưng tôi đã tự hỏi nếu có một cách thanh lịch hơn.Làm cách nào để biết khi nào tôi đã đến cuối tệp khi sử dụng phương pháp ReadBlock trong C#?
Trả lời
while(!streamReader.EndOfStream)
{
string line = streamReader.ReadLine();
Console.WriteLine(line);
}
Console.WriteLine("End of File");
Kiểm tra StreamReader.EndOfStream. Dừng vòng đọc của bạn khi đây là true
.
Đảm bảo mã của bạn xử lý chính xác giá trị trả lại cho "số byte vừa đọc" trên số ReadBlock
cuộc gọi. Có vẻ như bạn đang thấy không đọc byte và chỉ giả sử rằng nội dung đệm không thay đổi bạn thấy là một lần đọc khác của cùng một dữ liệu.
Từ MSDN cho ReadBlock()
:
Return Value Type: System.Int32 Vị trí của dòng cơ bản là tiên tiến bởi số ký tự được đọc vào bộ đệm. Số các ký tự đã được đọc. Số sẽ nhỏ hơn hoặc bằng số , tùy thuộc vào việc tất cả các đầu vào ký tự đã được đọc chưa.
Vì vậy, tôi sẽ giả định đó là EOF khi nó trả về 0,
Khi chiều dài đọc lại nhỏ hơn chiều dài đọc yêu cầu của bạn, bạn đang ở cuối. Bạn cũng nên theo dõi độ dài đọc trong trường hợp kích thước luồng của bạn không phù hợp với kích thước bộ đệm của bạn, vì vậy bạn cần tính đến độ dài của dữ liệu trong bộ đệm ngắn hơn.
do{
len = stream.ReadBlock(buffer, 0, buffer.Length);
/* ... */
}while(len == buffer.Length);
Bạn cũng có thể kiểm tra cờ EndOfStream
của luồng trong điều kiện vòng lặp của bạn. Tôi thích phương pháp này vì bạn sẽ không đọc được độ dài '0' (điều kiện hiếm hoi, nhưng nó có thể xảy ra).
do{
len = stream.ReadBlock(buffer, 0, buffer.Length);
/* ... */
}while(!stream.EndOfStream);
Đáng tiếc là tôi không thể bình luận về câu trả lời, nhưng câu trả lời của "The Moof" ...
Việc bạn sử dụng cur
đây là không đúng, như là tham số index
là dành cho chỉ mục trong buffer
nơi viết là bắt đầu. Vì vậy, đối với các ví dụ của bạn, nó sẽ được thay thế bằng 0
trong cuộc gọi đến stream.ReadBlock
.
- 1. Làm cách nào để biết tôi đang sử dụng phương thức lặp nào khi sử dụng phương pháp Integer.times?
- 2. Làm cách nào để biết khi nào OutputDataReceived cuối cùng đã đến?
- 3. Tôi làm cách nào để nhận URL chuyển hướng cuối cùng khi sử dụng urllib2.urlopen?
- 4. Làm cách nào để nhận các tệp đã sửa đổi khi tôi sử dụng NetBeans?
- 5. Khi nào tôi xác định các phương pháp target-c?
- 6. Sử dụng Boto để biết khi nào một tệp đã được tải lên Glacier
- 7. Tôi nên sử dụng phương pháp nào cho C# scripting
- 8. Làm cách nào để biết khi nào đối tượng AudioTrack đã phát xong?
- 9. Làm thế nào để tôi biết khi nào async cuối cùng được thực hiện?
- 10. PHP - khi sử dụng foreach để lặp qua mảng, làm cách nào tôi có thể biết liệu tôi có đang sử dụng cặp cuối cùng không?
- 11. Cách biết khi nào phông chữ đã được áp dụng
- 12. Làm cách nào để biết khi nào một ListBox đã hoàn tất hiển thị trong Silverlight?
- 13. cách biết lớp/gói/phương thức nào được sử dụng bởi tệp jar đã cho?
- 14. Tôi làm cách nào để biết cổng nối tiếp nào được sử dụng trên Linux?
- 15. Làm cách nào để tạo một RichTextBox cuộn đến cuối khi tôi thêm một dòng mới?
- 16. C#: Làm thế nào để sử dụng phương pháp Enumerable.Aggregate
- 17. Làm cách nào để phân tích cú pháp đối tượng JSON trong C# khi tôi không biết khóa trước?
- 18. Làm cách nào để biết khi nào nên sử dụng các chỉ mục và loại nào?
- 19. hãy cho tôi biết khi nào sử dụng phương thức getInstance() trong java.
- 20. Làm thế nào để biết liệu một điều tra viên đã đến cuối bộ sưu tập trong C# chưa?
- 21. Làm cách nào để tôi biết DOMDocument-> load() mã hóa nào tôi muốn sử dụng?
- 22. Làm thế nào để kiểm tra xem tôi đã đạt đến cuối chuỗi trong Java chưa?
- 23. Làm cách nào để tìm tệp Perl nào được tải khi tôi sử dụng mô-đun?
- 24. Làm cách nào để biết loại tệp sử dụng Boost.Filesystem?
- 25. Làm cách nào để biết khi nào bạn cần giải pháp BPM?
- 26. Tệp machine.config nào là giải pháp của tôi khi sử dụng trên máy chủ?
- 27. Làm thế nào để bạn ngăn hộp thoại in khi sử dụng phương pháp Excel PrintOut
- 28. Khi nào tôi nên sử dụng cuối cùng-block trong Java try-catch-cuối cùng
- 29. Làm thế nào để biết khi nào trang đã sẵn sàng mà không cần sử dụng jQuery (cách thay thế)?
- 30. khi nào sử dụng void * trong C++