如何使用StreamReader和StreamWriter创建文件副本

cla*_*chu 6 c# copy streamwriter streamreader

我需要使用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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

dbo*_*nes 7

让我们考虑你已经打开了两个流,类似@ 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个要点,包含一个计算转移速度的类 https://gist.github.com/dbones/9298655#file-streamcopy-cs-L36


小智 5

这将做到这一点:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但这不是一次性读取整个输入流然后一次性写出来吗?这不是失去了使用流的意义吗?如果数据很大(几千兆字节),那么您将一次性将整个数据存储在内存中,而不仅仅是一个滑动窗口。 (15认同)