C# 合并多个文本文件-StreamWriter不写入一个文件?
我只想合并给定目录中的所有文本文件,类似于以下命令提示符命令:C# 合并多个文本文件-StreamWriter不写入一个文件?,c#,streamreader,streamwriter,C#,Streamreader,Streamwriter,我只想合并给定目录中的所有文本文件,类似于以下命令提示符命令: cd $directory copy * result.txt 我已经编写了下面的代码,它几乎实现了我想要的,但是它做了一些奇怪的事情。当StreamWriter写入第一个文件时(或当i=0时),它实际上不会写入任何内容-尽管第一个文件约为300 KB,但文件大小仍为0字节。但是,其他文件写入操作将成功执行 如果我将命令提示符的输出与diff中C#代码的输出进行比较,您会发现缺少一大块文本。此外,命令提示结果为1044KB,其中C
cd $directory
copy * result.txt
我已经编写了下面的代码,它几乎实现了我想要的,但是它做了一些奇怪的事情。当StreamWriter
写入第一个文件时(或当i=0
时),它实际上不会写入任何内容-尽管第一个文件约为300 KB,但文件大小仍为0字节。但是,其他文件写入操作将成功执行
如果我将命令提示符的输出与diff中C#代码的输出进行比较,您会发现缺少一大块文本。此外,命令提示结果为1044KB,其中C#结果为700KB
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());
}
}
}
string[]txtFiles=Directory.GetFiles(filepath);
使用(StreamWriter=newstreamwriter(filepath+“result.txt”))
{
对于(int i=0;i
我是否错误地使用了
StreamWriter
/StreamReader
。注意:通过从一个流复制到另一个流,可以节省一些ram并大大提高性能
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
}
}
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
字符串文件路径=@“C:\Users\FunkyName\Desktop”;
字符串[]txtFiles=Directory.GetFiles(filePath,*.txt”);
使用(Stream-Stream=File.Open(Path.Combine(filePath,“result.txt”)、FileMode.OpenOrCreate))
{
对于(int i=0;i
最低限度的实现,读取字节并写入它们,而不是使用流进行读取-请注意,您应该正确处理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"))
致:
我猜您看不到该文件,因为它保存在另一个文件夹中。
FileMode.OpenOrCreate
将在程序再次在同一目录中运行时,再次将所有文件添加到输出文件中。而是使用FileMode.Create
完全覆盖它,或者使用FileMode.CreateNew
在异常已经存在时获取异常。@Herdo程序在运行之前删除与filePath
变量匹配的任何现有文件夹,因此此实现应该可以。非常感谢。
using (StreamWriter writer = new StreamWriter(filepath + "/result.txt"))