2012-10-22 49 views
6

Tôi có tệp văn bản được ứng dụng khác sử dụng làm tệp cấu hình. Tôi đã đọc trong mỗi dòng của tệp vào một mảng Chuỗi:Thay thế một dòng trong một tệp văn bản

string[] arrLine = File.ReadAllLines(pathToFile); 

hoạt động chính xác cách tôi cần.

Bây giờ, tất cả những gì tôi cần làm là thay thế toàn bộ dòng của arrLine [x] bằng một chuỗi, ghi đè lên những gì có trên dòng đó và chỉ dòng đó. Tôi đã viết mã để biết chính xác dòng tôi cần phải thay thế, tôi chỉ cần biết làm thế nào để thay thế nó.

Tôi đang nghĩ về arrLine [x] .Replace (oldString, newString) - nếu điều này hoạt động, làm cách nào tôi thực sự cam kết thay đổi đối với tệp văn bản? Do tôi bằng cách nào đó cần phải viết lại toàn bộ tập tin? Im nghĩ rằng sẽ có một chút về phía không hiệu quả khi chỉ có một dòng cần viết lại?

+1

Chỉ cần ghi đè chuỗi có trong đó một bài tập. Không cần thay thế. –

Trả lời

7

Bạn nên có thể chỉ cần gán rằng yếu tố:

arrLine[yourLineNumber] = "Foo"; 

làm thế nào tôi sẽ thực sự cam kết thay đổi để các tập tin văn bản?

Khi bạn đã thực hiện việc này, bạn có thể sử dụng File.WriteAllLines(pathToFile, arrLine); để ghi dữ liệu trở lại tệp gốc.

+0

Cảm ơn - chỉ là những gì tôi cần! – Aburley

+4

Điều này không thực tế trả lời câu hỏi quan trọng, mà tôi hiểu là "Có cần phải viết lại toàn bộ tập tin hay không, hoặc có cách nào để thay thế chỉ một dòng đã bị thay đổi không?" Một cái gì đó như "sed cho C#" là những gì thực sự muốn ở đây. sed chính nó có thể được gọi là từ một chương trình mono C# trong Linux với Stdlib.system ("sed-i s? vv blah blah"), nhưng điều này có thể lộn xộn. – mickeyf

+0

Ok vì vậy tôi chỉ đọc một đám mây điểm PLY 1,5gb để thay đổi dòng 3. Nó sử dụng 8GB ram. Nó sẽ có ý nghĩa có File.WriteSingeLine(); –

Các vấn đề liên quan