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