Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将一个文件的内容写入另一个文件?_C#_.net - Fatal编程技术网

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

C# 如何将一个文件的内容写入另一个文件?,c#,.net,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(stre

我需要使用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));
}

使用
System.IO
中的
FileStream

[ComVisibleAttribute(true)]
public class FileStream : Stream

试着做以下几点:

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);
    }
}

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

我们需要使用FileStream吗?因为使用简单的文件类可以很容易地做到这一点,比如

using System.IO;
string FileContent = File.ReadAllText(FilePathWhoseTextYouWantToCopy);
File.WriteAllText(FilePathToWhomYouWantToPasteTheText,FileContent);

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

    byte[] verifyArray = binReader.ReadBytes(arrayLength);
    if(verifyArray.Length != arrayLength)
    {
        Console.WriteLine("Error reading the data.");
        return;
    }
另一种选择是,您可能需要输入输出缓冲区:

writer.Flush();
只是想知道为什么不使用这个:

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

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

如果要追加,仍然可以使用File类

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

这适用于将整个文件加载到内存中时大小较小的文件。

如果您不喜欢使用文件的读/写功能,可以尝试使用复制功能

Easiest will be : 

      File.Copy(source_file_name, destination_file_name, true)

true-->用于覆盖现有文件,如果没有“true”,它将创建一个新文件。但如果该文件已经存在,它将抛出不带“true”参数的异常。

我的代码示例使用filestream。我应该如何修改此代码才能工作?您发布的代码有什么问题?你有什么错误?我不知道我应该一次读取所有字节还是不应该?除了stream.length很长,而reader.ReadBytes需要int,这意味着什么?您的问题很关键-您是否应该一次性读取所有字节?这意味着在调用这段代码时,您希望进程使用多少内存(当然,基于文件大小)。一次性阅读可能会消耗大量内存。其他答案显示了如何将其分为1K或4K位。如果将其分块,请注意它可能会导致性能损失。这是你的权衡。分析你的情况,选择最符合你要求的。为什么你说,我应该根据我的申请改变它?你的意思是说我需要决定块大小(在你的例子中是4mb)?我们真的应该分块读取字节还是一次读取就可以了?@Sumee我想一次读取所有字节取决于文件大小,如果你有一个非常大的文件,那么读取所有字节可能对你的缓冲区来说太大了?(我不知道会发生什么,否则我怀疑你可能不会像你预期的那样得到所有的文本)@Wes Price-对不起,我的意思是4k@Summe:是,将文件路径和缓冲区长度更改为所需长度。正如onaclov2000所提到的,增量阅读对您有好处,如果您有一个大文件,那么可能会出现一些症状,这种方法可以帮助您缓解这些症状。@Eugene:我相信偏移量将用于指定与任一文件中当前位置的偏移量,但是,不需要任何进一步的偏移量,因为我们在两个文件中的位置都是由我们上次读取或写入的字节数决定的。BinaryReader和BinaryWriter语句需要吗?当然可以用“var”替换它们。您能告诉我这两个语句的用法吗?换句话说,没有这两条语句会发生什么?File.Copy太简单了!非常感谢。我可以看到这样一个场景:在覆盖一组文件之前,您希望成功地打开这些文件流。这样,如果要使用File.Copy,就不会覆盖5个文件中的2个。要做到这一点,您需要先打开所有文件上的FileStream,然后使用您已经与Binary writer和readerSimple一起打开的FileStream覆盖它们,这对小文件很有用。显然,您不希望将其用于大型文件,因为您将把整个文件内容加载到内存中。这是追加还是重写?
string content = File.ReadAllText("C:\\file1.txt");
File.AppendAllText("D:\\file2.txt",content);
Easiest will be : 

      File.Copy(source_file_name, destination_file_name, true)