Tôi đang thay đổi tệp qua FileStream (đó là tệp rất lớn và tôi chỉ cần thay đổi tiêu đề mà không cần ghi lại toàn bộ tệp.
Tệp có thể có dòng mới Unix hoặc Windows và điều quan trọng là tôi phải biết dòng mới nào để có thể ghi lại dòng mới chính xác vào tệp khi cập nhật.
Tôi có thể viết một hàm đơn giản để đọc tệp trong một khối bằng FileStream và kiểm tra dòng mới.
Nhưng vấn đề này chắc hẳn đã được giải quyết trước đó, nếu không phải ở C# thì là ở Win32 API?
Cách hiệu quả nhất để phát hiện các mẫu ngắt dòng trong một tệp là gì?
Cảm ơn lời đề nghị của mọi người. Tôi rất ngạc nhiên khi không tìm thấy thứ gì đó có thể tái sử dụng dễ dàng, vì vậy tôi đã tạo một hàm đơn giản mà tôi đưa vào đây. Lưu ý rằng nó chỉ tìm ký tự dòng mới đầu tiên (\n hoặc \r\n) và trả về nó dưới dạng khớp. Đủ cho nhu cầu của tôi, nhưng có lẽ không đủ mạnh.
bool công khai TryDetectNewLine(đường dẫn chuỗi, chuỗi ra newLine)
{
sử dụng (var fileStream = File.OpenRead(path))
{
char prevChar = '\0';
// Đọc 4000 ký tự đầu tiên để thử tìm dòng mới
cho (int i = 0; i < 4000; i++)
{
int b;
if ((b = fileStream.ReadByte()) == -1) break;
char curChar = (char)b;
nếu (curChar == '\n')
{
newLine = prevChar == '\r' ? "\r\n" : "\n";
trả về đúng sự thật;
}
prevChar = curChar;
}
// Trả về sai có nghĩa là không thể xác định quy ước nguồn cấp dữ liệu
newLine = Môi trường.NewLine;
trả về sai;
}
}
Giới thiệu về c# - Làm cách nào để phát hiện xem tệp có ký tự dòng mới Unix (\ n) hay ký tự dòng mới của Windows (\ r\n)? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11829559/
Tôi là một lập trình viên xuất sắc, rất giỏi!