C# 我无法使用FileStream复制文件

C# 我无法使用FileStream复制文件,c#,C#,我正在尝试使用FileStream读取/写入文件。代码正在运行,但复制完所有文件后,我得到一个空文件。不会复制文件中的字符串数据 if (openFileDialog1.ShowDialog() == DialogResult.OK) { if(saveFileDialog1.ShowDialog()==DialogResult.OK) { FileStream streamR = new FileStream(openFileDialog1.FileName

我正在尝试使用
FileStream
读取/写入文件。代码正在运行,但复制完所有文件后,我得到一个空文件。不会复制文件中的字符串数据

if (openFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    if(saveFileDialog1.ShowDialog()==DialogResult.OK)
    {
        FileStream streamR = new FileStream(openFileDialog1.FileName, FileMode.Open);
        byte[] buffer = new byte[streamR.Length];
        streamR.Read(buffer, 0, buffer.Length);
        FileStream streamW = new FileStream(saveFileDialog1.FileName,FileMode.Create);
        int read_byte = 0;
        while ((read_byte = streamR.Read(buffer, 0, buffer.Length)) > 0) 
        {
            streamW.Write(buffer, 0, read_byte);
        }
    }
}

使用流时,应使用“使用”命令:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ 
    if(saveFileDialog1.ShowDialog()==DialogResult.OK)
    {
        using (FileStream streamR = new FileStream(openFileDialog1.FileName, FileMode.Open))
        {
            using (FileStream streamW = new FileStream(saveFileDialog1.FileName,FileMode.Create))
            {
                byte[] buffer = new byte[streamR.Length];
                int read_byte = 0;
                while ((read_byte = streamR.Read(buffer, 0, buffer.Length)) > 0)
                {
                    streamW.Write(buffer, 0, read_byte);
                }
            }
        }
    }
}
它将自动为您冲洗、关闭和处理流。 真正阻止代码工作的是flush()和close()命令。 但是,仍然建议使用“using”命令

第二种方法是将所有内容包装在try-finally块中,并在finally块中处理流:

无论如何,我建议在继续之前阅读更多关于流的信息。 另一方面如果只是为了复制文件,那么使用Fil.Copy方法会更简单

编辑:还有。。。当文件相当大时,将原始文件完全加载到字节数组可能会导致一些额外的问题。 缓冲区用于从原始文件中读取块并对其进行处理。
我刚刚修改了你的代码让它正常工作。。。但这还远远不够完美。

我会按照以下思路做一些事情:

if (openFileDialog1.ShowDialog() == DialogResult.OK 
    && saveFileDialog1.ShowDialog() == DialogResult.OK){
    try {
        if (File.Exists(saveFileDialog1.FileName)) {
            File.Delete(saveFileDialog1.FileName);
        }
        File.Copy(openFileDialog1.FileName, saveFileDialog1.FileName);
    } catch (Exception e){
        //handle or throw e
    }
}

文件有什么问题。复制吗?此外,您的代码出现严重错误,您没有处理
文件流
,您不关心异常。请使用
或至少关闭流。