如何将一个文件的内容写入另一个文件?

时间:2010-10-12 12:05:20

标签: c# .net

我需要使用File.OpenRead和File.OpenWrite方法将文件的内容写入另一个文件。我无法弄清楚如何去做。

如何修改以下代码以便我使用。

using (FileStream stream = File.OpenRead("C:\\file1.txt"))
using (FileStream writeStream = File.OpenWrite("D:\\file2.txt"))
{
       BinaryReader reader = new BinaryReader(stream);
       BinaryWriter writer = new BinaryWriter(writeStream);
       writer.Write(reader.ReadBytes(stream.Length));
}

8 个答案:

答案 0 :(得分:28)

    using (FileStream stream = File.OpenRead("C:\\file1.txt"))
    using (FileStream writeStream = File.OpenWrite("D:\\file2.txt"))
    {
        BinaryReader reader = new BinaryReader(stream);
        BinaryWriter writer = new BinaryWriter(writeStream);

        // create a buffer to hold the bytes 
        byte[] buffer = new Byte[1024];
        int bytesRead;

        // while the read method returns bytes
        // keep writing them to the output stream
        while ((bytesRead =
                stream.Read(buffer, 0, 1024)) > 0)
        {
            writeStream.Write(buffer, 0, bytesRead);
        }
    }

想知道为什么不使用它:

File.Copy("C:\\file1.txt", "D:\\file2.txt");

答案 1 :(得分:5)

除非您想要附加到第二个文件,否则您应该使用File.Copy

如果你想追加你仍然可以使用File类。

string content = File.ReadAllText("C:\\file1.txt");
File.AppendAllText("D:\\file2.txt",content);

答案 2 :(得分:1)

尝试以下几点:

using (FileStream input = File.OpenRead(pathToInputFile),
    output = File.OpenWrite(pathToOutputFile))
{
    int read = -1;
    byte[] buffer = new byte[4096];
    while (read != 0)
    {
        read = input.Read(buffer, 0, buffer.Length);
        output.Write(buffer, 0, read);
    }
}

请注意,这有些“骨架”,您应该根据应用需要进行修改。

答案 3 :(得分:1)

我们有必要使用FileStream吗?因为您可以使用简单的文件类(如

)轻松完成此操作
using System.IO;
string FileContent = File.ReadAllText(FilePathWhoseTextYouWantToCopy);
File.WriteAllText(FilePathToWhomYouWantToPasteTheText,FileContent);

答案 4 :(得分:1)

using (var inputStream = File.OpenRead(@"C:\file1.txt"))
{
    using (var outputStream = File.OpenWrite(@"D:\file2.txt"))
    {
        int bufferLength = 128;
        byte[] buffer = new byte[bufferLength];
        int bytesRead = 0;

        do
        {
            bytesRead = inputStream.Read(buffer, 0, bufferLength);
            outputStream.Write(buffer, 0, bytesRead);
        }
        while (bytesRead != 0);
    }
}

答案 5 :(得分:0)

使用FileStream中的System.IO课程。

[ComVisibleAttribute(true)]
public class FileStream : Stream

答案 6 :(得分:0)

您是否检查过读者正在阅读所有数据? This MSDN page有一个示例,用于检查读取的所有数据:

    byte[] verifyArray = binReader.ReadBytes(arrayLength);
    if(verifyArray.Length != arrayLength)
    {
        Console.WriteLine("Error reading the data.");
        return;
    }

另一种选择是您可能需要Flush输出缓冲区:

writer.Flush();

答案 7 :(得分:0)

如果您不喜欢使用File的读/写功能,最好尝试使用复制功能

Easiest will be : 

      File.Copy(source_file_name, destination_file_name, true)

真 - >覆盖现有文件,没有" true"它将创建一个新文件。但是如果该文件已经存在,它将抛出异常,而不是" true"参数。