我无法使用流复制文件

时间:2014-09-16 15:15:29

标签: c#

我有一个使用流复制文件的功能。我想我搞砸了所有内容,因为无论什么时候试图激活这些代码我的电脑都会冻结..可以请你帮忙

我也试过使用Using语句。但它变得越来越复杂了

void CopyFiles(string path, string savepath)
{
    FileStream fsopen = new FileStream(path, FileMode.Open, FileAccess.Read);
    byte[] buf = new byte[1024];
    int count = fsopen.Read(buf, 0, buf.Length);
    fsopen.Close();

    FileStream fsw = new FileStream(savepath, FileMode.Create, FileAccess.Write);
    while (count > 0)
    {
        fsw.Write(buf, 0, count);
    }

    fsw.Close();
    fsw.Flush();
}

4 个答案:

答案 0 :(得分:2)

你在while(count > 0)

之后做了一个无限循环

您知道要写入的数据的长度,但您必须再次读取缓冲区的最大长度

FileStream fsw = new FileStream(savepath, FileMode.Create, FileAccess.Write);
int count = 0;
do
{
    count = fsopen.Read(buf, 0, buf.Length);
    if (count > 0)
        fsw.Write(buf, 0, count);
}
while (count > 0)

并且不要忘记在完成后关闭流。

答案 1 :(得分:2)

正如@FrédéricHamidi指出的那样,While循环while(count> 0)将永远运行,因为你没有递增计数使其大于0。

其次,您只是读取文件的第一个kb,关闭文件,然后将文件的第一个kb写入另一个文件。

using (FileStream source = File.Open(@"c:\temp\data.dat",
   FileMode.Open))
 {

   // Copy source to destination.
   source.CopyTo(destination);
}

http://msdn.microsoft.com/en-us/library/dd782932(v=vs.110).aspx

答案 2 :(得分:1)

循环阅读:

FileStream fsopen = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] buf = new byte[1024];

FileStream fsw = new FileStream(savepath, FileMode.Create, FileAccess.Write);
int count = 0;

do  
{
    count = fsopen.Read(buf, 0, buf.Length);
    fsw.Write(buf, 0, count);

} (while count > 0)

fsopen.Close();

或者只使用File.Copy()Stream.CopyTo()

答案 3 :(得分:0)

尝试这样的事情:

void CopyFiles(string path, string savepath)
{
    FileStream fsopen = new FileStream(path, FileMode.Open, FileAccess.Read);
    byte[] buf = new byte[1024];

    FileStream fsw = new FileStream(savepath, FileMode.Create, FileAccess.Write);
    int count = 0;
    while ((count=fsopen.Read(buf, 0, buf.Length))>0)
    {
        fsw.Write(buf, 0, count);
    }

    fsw.Flush();
    fsw.Close();
}