我有一个使用流复制文件的功能。我想我搞砸了所有内容,因为无论什么时候试图激活这些代码我的电脑都会冻结..可以请你帮忙
我也试过使用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();
}
答案 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();
}