[英]How to create copy of file using StreamReader and StreamWriter
我需要使用 StreamReader 读取控制台应用程序上的 .txt 文件,然后创建一个具有不同名称但内容相同的新文件或备份。 问题是我无法弄清楚如何使用第一个文件中的内容放入新文件中。 (这是一个学校的事情,我是 C# 的新手)
using System;
using System.IO;
namespace UserListCopier
{
class Program
{
static void Main()
{
string fineName = "zombieList.txt";
StreamReader reader = new StreamReader(fineName);
int lineNumber = 0;
string line = reader.ReadLine();
while (line != null) {
lineNumber++;
Console.WriteLine("Line {0}: {1}", lineNumber, line);
line = reader.ReadLine();
}
StreamWriter writetext = new StreamWriter("zombieListBackup.txt");
writetext.Close();
System.Console.Read();
reader.Close();
}
}
}
让我们考虑一下您已经打开了两个流,类似于@jeff 的解决方案,但是您可以缓冲传输而不是 ReadToEnd(不是真正有效地流)。
_bufferSize 是一个 int 将其设置为适合您的缓冲区大小(1024、4096 随便)
private void CopyStream(Stream src, Stream dest)
{
var buffer = new byte[_bufferSize];
int len;
while ((len = src.Read(buffer, 0, buffer.Length)) > 0)
{
dest.Write(buffer, 0, len);
}
}
这是一个要点,包含一个计算传输速度的类https://gist.github.com/dbones/9298655#file-streamcopy-cs-L36
这将做到这一点:
using System;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
using (var reader = new StreamReader(@"C:\MyOriginalFile.txt"))
using (var writer = new StreamWriter(@"C:\MyNewFile.txt", append: false))
{
writer.Write(reader.ReadToEnd());
}
Console.Read();
}
}
}
对于磁盘上的文件,您只需要File.Copy(inputPath, outputPath)
。 我不确定这是否有效地流式传输内容,或者是否将其全部读入内存然后一次性全部写出。
因此,对于大文件,或者如果您的流无法解析为磁盘上的路径,您可以使用以下函数有效地从一个文件复制到另一个文件:
private void copyFile(string inputPath, string outputPath)
{
using (var inputStream = StreamReader(inputPath))
{
using (var outputStream = StreamWriter(outputPath))
{
copyToOutputStream(inputStream, outputStream);
}
}
}
private void copyToOutputStream(StreamReader inputStream, StreamWriter outputStream)
{
string line = null;
while ((line = inputStream.ReadLine()) != null)
{
outputStream.WriteLine(line);
}
outputStream.Write(inputStream.ReadToEnd());
}
此函数一次一行地从输入流复制到输出流,直到输入流结束。 这意味着它一次在内存中只有一行(而不是整个文件),并且它可以在第一个流完成读入/生成之前开始写入磁盘。
public static void ReadFromFile()
{
using(StreamReader sr =File.OpenText(@"D:\new.txt"))
{
string line=null;
while ((line=sr.ReadLine())!= null)
{
// line = sr.ReadLine;
using (StreamWriter sw = File.AppendText(@"D:\output.txt"))
{
sw.WriteLine(line);
}
}
}
}
要回答实际问题:
using var reader = new StreamReader(someInput);
using var writer = new StreamWriter(someOutput);
reader.CopyTo(writer.BaseStream);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.