[英]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.