簡體   English   中英

合並多個文本文件-StreamWriter是否不寫入一個文件?

[英]Merging Multiple Text Files - StreamWriter Not Writing One File?

我只想合並給定目錄中的所有文本文件,類似於以下命令提示符命令:

cd $directory
copy * result.txt

我已經編寫了以下代碼,幾乎可以實現我想要的功能,但是它卻在做一些奇怪的事情。 StreamWriter寫入第一個文件時(或i = 0 ),它實際上並未寫入任何內容-盡管第一個文件約為300 KB,文件大小仍為0字節。 但是,其他文件寫入成功執行。

如果我將命令提示符下的輸出與diff中C#代碼的輸出進行比較,則可以看到缺少大量文本。 此外,命令提示符結果為1,044 KB,其中C#結果為700 KB。

string[] txtFiles = Directory.GetFiles(filepath);
using (StreamWriter writer = new StreamWriter(filepath + "result.txt"))
{
    for (int i = 0; i < txtFiles.Length; i++)
    {
       using (StreamReader reader = File.OpenText(txtFiles[i]))
       {
           writer.Write(reader.ReadToEnd());
       }
     }
}

我是否錯誤地使用StreamWriter / StreamReader

在這里,希望對您有所幫助。 注意:通過從流復制到另一流,可以節省一些內存並大大提高性能。

class Program
{
    static void Main(string[] args)
    {
        string filePath = @"C:\Users\FunkyName\Desktop";
        string[] txtFiles = Directory.GetFiles(filePath, "*.txt");

        using (Stream stream = File.Open(Path.Combine(filePath, "result.txt"), FileMode.OpenOrCreate))
        {
            for (int i = 0; i < txtFiles.Length; i++)
            {
                string fileName = txtFiles[i];
                try
                {
                    using (Stream fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read))
                    {
                        fileStream.CopyTo(stream);
                    }
                }
                catch (IOException e)
                {
                    // Handle file open exception
                }
            }
        }
    }
}

簡約的實現,讀取並寫入字節,而不是使用流進行讀取-請注意,您應該正確處理IOException以避免行為異常:

var newline = Encoding.ASCII.GetBytes(Environment.NewLine);
var files = Directory.GetFiles(filepath);
try
{
    using (var writer = File.Open(Path.Combine(filepath, "result.txt"), FileMode.Create))
        foreach (var text in files.Select(File.ReadAllBytes))
        {
            writer.Write(text, 0, text.Length);
            writer.Write(newline, 0, newline.Length);
        }
}
catch (IOException)
{
    // File might be used by different process or you have insufficient permissions
}

我寫了你的代碼,它正常工作! 僅更改行:

using (StreamWriter writer = new StreamWriter(filepath + "result.txt"))

至:

using (StreamWriter writer = new StreamWriter(filepath + "/result.txt")) 

我想您看不到該文件,因為它保存在另一個文件夾中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM