2015-10-10 86 views
0

我想從一個文件複製內容到另一個文件。除此之外,我還希望在此內容之前和之後添加默認文本。將文件和文本添加到另一個文件c#

我發現下面的方法進行的文件有:

public void MergeFile(String path1, string path2) 
    { 
     var text1 = "Text"; 
     var text2 = "Another text"; 

     using (FileStream source1 = File.Open(path1, FileMode.Open)) 
     { 
      using (FileStream source2 = File.Open(path2, FileMode.Open)) 
      { 
       source1.CopyTo(source2); 
      } 
     } 
    } 

我想text1的在文件和文本2作爲文件的最後一行的開始。任何人都可以提供一些建議,如何做到這一點?

我希望解決方案儘可能快,因爲source1內容可能長達數千行。

謝謝。

+1

這並不難,有幾個方法可以做到這一點。 。如果你需要一個快速功能的簡單例子,你應該看看下面的功能來寫和/或附加文本到現有的文件以及另一個文件'WriteLine' frunction。我會爲你發佈一個..你很漂亮關閉你所擁有的,但我個人會重構它到一個方法,該方法檢查文件是否不存在,然後寫入文件,否則創建一個FileStream並使用WriteLine方法讓我知道如果你需要的例子 – MethodMan

回答

1

使用Stream.CopyTo可能是您最好的選擇。前後只需撥打FileStream.Write

var text1 = "Text"; 
var text2 = "Another text"; 
using (FileStream source1 = File.Open(source1, FileMode.Open)) 
{ 
    using (FileStream source2 = File.Open(source2, FileMode.Open)) 
    { 
     source2.Write(Encoding.UTF8.GetBytes(text1), 0, text1.Length); 
     source1.CopyTo(source2); 
     source2.Write(Encoding.UTF8.GetBytes(text2), 0, text2.Length); 
    } 
} 

幾件事情要注意:

  • 這會不會增加新行字符是(添加\r\n到你的字符串結束時,如果你需要的)
  • 這將覆蓋原有文件(如果不需要,請使用不同的FileMode
  • 這不會創建新文件(如果不需要,請使用不同的FileMode
+0

是的,據我所知Stream.CopyTo是一個安全的賭注,但我嘗試了一些這種解決方案的變種,沒有任何運氣。這一個伎倆。謝謝。 還應該說文件檢查沒有發生在這裏,我希望文件被覆蓋。 – sirtam

0

如果你想創建一個現有的文件,然後追加到它,你能不能退出方法如下..很簡單的理解

static void Main(string[] args) 
{ 
    string path = @"C:\FileWrite_Append\SomeFile.txt"; 

    if (!System.IO.File.Exists(path)) 
    { 
    WriteAndOrAppendText(path, "Text"); 
    } 
    else if (System.IO.File.Exists(path)) 
    { 
    WriteAndOrAppendText(path, "Another Text");    
    } 
} 

private static void WriteAndOrAppendText(string path, string strText) 
{ 
    if (!File.Exists(path)) 
    { 
     StreamWriter fileStream = new StreamWriter(path, true); 
     fileStream.WriteLine(strText); 
     fileStream.Flush(); 
     fileStream.Close(); 
    } 
    else 
    { 
     StreamWriter fileStream2 = new StreamWriter(path, true); 
     fileStream2.WriteLine(strText); 
     fileStream2.Flush(); 
     fileStream2.Close(); 
    } 
} 
相關問題