我用以下方法,复制一个文件 ,但是我打开ss.doc提示错误!但是我好象复制txt文件好象又可以用,不知道什么问题,谢谢!
FileStream fs = new FileStream("f:\\test.doc", FileMode.Open, FileAccess.Read);
FileStream fs1 = new FileStream("f:\\ss.doc", FileMode.Append, FileAccess.Write);
fs.Position = 0;
fs1.Position = 0;
while (fs.Position < fs.Length)
{
byte[] dt = new byte[1024];
int i = fs.Read(dt, 0, 1024);
fs.Flush();
fs1.Write(dt, 0, i);
fs1.Flush();
fs.Position = fs.Position + i;
fs1.Position = fs1.Position + i;
}
fs.Flush();
fs1.Flush();
fs.Close();
fs1.Close();
FileStream fs = new FileStream("f:\\test.doc", FileMode.Open, FileAccess.Read);
FileStream fs1 = new FileStream("f:\\ss.doc", FileMode.Append, FileAccess.Write);
fs.Position = 0;
fs1.Position = 0;
while (fs.Position < fs.Length)
{
byte[] dt = new byte[1024];
int i = fs.Read(dt, 0, 1024);
fs.Flush();
fs1.Write(dt, 0, i);
fs1.Flush();
fs.Position = fs.Position + i;
fs1.Position = fs1.Position + i;
}
fs.Flush();
fs1.Flush();
fs.Close();
fs1.Close();
System.IO.File.Copy
结果打开ss.doc说是错误,无法打开.
复制文件请用
System.IO.File.Copy
传输文件的话总不能用file.copy 吧,只能是byte[]形式传输啊
FileStream fs = new FileStream("f:\\test.doc", FileMode.Open, FileAccess.Read);
FileStream fs1 = new FileStream("f:\\ss.doc", FileMode.Append, FileAccess.Write);
fs.Position = 0;
fs1.Position = 0;
while (fs.Position < fs.Length)
{
byte[] dt = new byte[1024];
int i = fs.Read(dt, 0, 1024);
fs.Flush();
fs1.Write(dt, 0, i);
fs1.Flush();
fs1.Position = fs1.Position;
}
fs.Flush();
fs1.Flush();
fs.Close();
fs1.Close();
fs.position是流文件读取后的当前位置,你不用再进行设置它+I,否则会没有完全复制一些流文件.
/// 复制文件
/// </summary>
/// <param name="fromFile">要复制的文件</param>
/// <param name="toFile">要保存的位置</param>
/// <param name="lengthEachTime">每次复制的长度</param>
private void CopyFile(string fromFile, string toFile, int lengthEachTime)
{
FileStream fileToCopy = new FileStream(fromFile, FileMode.Open, FileAccess.Read);
FileStream copyToFile = new FileStream(toFile, FileMode.Append, FileAccess.Write);
int lengthToCopy;
if (lengthEachTime < fileToCopy.Length)//如果分段拷贝,即每次拷贝内容小于文件总长度
{
byte[] buffer = new byte[lengthEachTime];
int copied = 0;
while (copied <= ((int)fileToCopy.Length - lengthEachTime))//拷贝主体部分
{
lengthToCopy = fileToCopy.Read(buffer, 0, lengthEachTime);
fileToCopy.Flush();
copyToFile.Write(buffer, 0, lengthEachTime);
copyToFile.Flush();
copyToFile.Position = fileToCopy.Position;
copied += lengthToCopy;
}
int left = (int)fileToCopy.Length - copied;//拷贝剩余部分
lengthToCopy = fileToCopy.Read(buffer, 0, left);
fileToCopy.Flush();
copyToFile.Write(buffer, 0, left);
copyToFile.Flush();
}
else//如果整体拷贝,即每次拷贝内容大于文件总长度
{
byte[] buffer = new byte[fileToCopy.Length];
fileToCopy.Read(buffer,0,(int)fileToCopy.Length);
fileToCopy.Flush();
copyToFile.Write(buffer, 0, (int)fileToCopy.Length);
copyToFile.Flush();
}
fileToCopy.Close();
copyToFile.Close();
}