2011-02-23 93 views
12

可能沒有其他方法可以做到這一點,但是有沒有辦法將一個文本文件的內容附加到另一個文本文件中,同時清除第一個文本文件後這個舉動?C#:將一個文本文件的*內容*添加到另一個文本文件

我所知道的是隻使用一個讀者和作家,這似乎效率不高的大文件的唯一途徑...

謝謝!

+0

這是唯一的方法? – CarneyCode 2011-02-23 19:46:27

+0

@Carn:這是一個猶豫的答案?或者... – CODe 2011-02-23 19:47:44

+1

您不能「解除鏈接」文件的塊並將它們「鏈接」到SO級別的另一個文件(即使因爲您想要的文件中的點不能位於塊邊界上)。你必須讀,寫,然後清除。如果你想做的事情......好吧......祝你好運! :-)這不是SQL :-)(從技術上講,它可能適用於較新的Windows)。如果你只是想「通常」這樣做,它大約是10/20行代碼(可能更少) – xanatos 2011-02-23 19:49:36

回答

26

不,我不認爲這有什麼。

如果這兩個文件使用相同的編碼,並且您不需要驗證它們是否有效,則可以將它們視爲二進制文件,例如,

using (Stream input = File.OpenRead("file1.txt")) 
using (Stream output = new FileStream("file2.txt", FileMode.Append, 
             FileAccess.Write, FileShare.None)) 
{ 
    input.CopyTo(output); // Using .NET 4 
} 
File.Delete("file1.txt"); 

注意,如果file1.txt包含一個字節順序標記,你應該跳過這首以避免它的file2.txt中間。

如果你不使用.NET 4,你可以編寫自己的Stream.CopyTo相當於...甚至擴展方法,使交接無縫:

public static class StreamExtensions 
{ 
    public static void CopyTo(this Stream input, Stream output) 
    { 
     if (input == null) 
     { 
      throw new ArgumentNullException("input"); 
     } 
     if (output == null) 
     { 
      throw new ArgumentNullException("output"); 
     } 
     byte[] buffer = new byte[8192]; 
     int bytesRead; 
     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      output.Write(buffer, 0, bytesRead); 
     } 
    } 
} 
+0

+1替換「file1.txt」外,我無法改進Jon的答案,因爲我不會想到在沒有添加其他級別的情況下「級聯」兩者。嗯...請問StyleCop標誌了嗎? – xanatos 2011-02-23 19:52:01

+0

@Jon:OpenAppend似乎不是File類的一個方法,你的意思是OpenWrite是偶然的嗎?此外,CopyTo也不可用,您正在使用System.IO來處理這些...對嗎?謝謝您的幫助! – CODe 2011-02-23 19:53:20

+0

@CODe:哎呀,正在檢查電話鈴響時。將解決。 'Stream.CopyTo'僅在.NET 4中使用 - 您使用的是哪個版本? – 2011-02-23 19:57:54

3

cmd.exe版本的,這是

型fileone.txt >> filetwo.txt

德爾fileone.txt

您可以創建一個系統shell來執行此操作。它應該非常有效。

+0

如果你不想刪除fileone.txt,但只是「清除它」,你可以使用'type nul> fileone.txt'。 – 2011-02-23 20:43:05

6

忽略的錯誤處理,編碼和效率的時刻,這樣的事情可能會工作(但我沒有測試過)

File.AppendAllText("path/to/destination/file", File.ReadAllText("path/to/source/file")); 

然後你只需要刪除或清除的第一個文件一旦這一步完成。

+0

並希望有人沒有完整的百科全書文件:-) – xanatos 2011-02-23 19:54:50

0

我不確定您的意思是「低效率」。 Jon的答案對大多數情況來說可能就足夠了。 但是,如果您擔心非常大的源文件,Memory-Mapped Files可能是您的朋友。詳情請見this link

相關問題