C# 局域网拷贝超过2G文件

xiaokan1982 2009-02-20 11:43:26
各位朋友大家好

小弟在局域网内经常要拷贝2G以上的大文件,现在产生2个问题
1。速度慢,非时间长。我的网络都是千M的
2。有时候会拷贝出错,我又要重新来。

请问个位如何能解决上面两个问题,最好给给小弟个C# 的代码

谢谢大家帮忙
...全文
533 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppfaq 2009-02-20
  • 打赏
  • 举报
回复
yulinlover 2009-02-20
  • 打赏
  • 举报
回复
在对方机器上装个Server-U,然后你这边装个FlashGet或者什么的,下载就完了呗,KMB的网络应该没问题的
yulinlover 2009-02-20
  • 打赏
  • 举报
回复
SHFileOperation吧,微软自己的复制拷贝功能,不知道记得对不对!
rhysming_0217 2009-02-20
  • 打赏
  • 举报
回复
两个星球的局域网
火星与地球
zgke 2009-02-20
  • 打赏
  • 举报
回复
你是用什么复制的啊.
iwxiaot 2009-02-20
  • 打赏
  • 举报
回复
两个国家的局域网?
成都慢生活 2009-02-20
  • 打赏
  • 举报
回复
I think split file with winrar or 7zip is best solution
xiaokan1982 2009-02-20
  • 打赏
  • 举报
回复
补充一下,我们需要对考的两台机器一台在国内,一台在美国,光线连接,到桌面是千M网线。
所以只能用代码来实现对考,不能物理接触
a12321321321312321 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vrhero 的回复:]
既然是域环境为什么不用DFS?不是什么事都需要写代码的...操作系统复制文件比你用任何方法写程序效率更高更安全...
[/Quote]
同意
happyboxman 2009-02-20
  • 打赏
  • 举报
回复
(转) C# FileStream复制大文件

即每次复制文件的一小段,以节省总内存开销。当然,本机复制也可以采用.NET内部的System.IO.File.Copy方法。
/// <summary>

/// 复制文件

/// </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();

}

soaringbird 2009-02-20
  • 打赏
  • 举报
回复
既然都有共享文件夹了,那就用dos命令copy好了
vrhero 2009-02-20
  • 打赏
  • 举报
回复
你这美国客户可够变态的...他们的网管水平低点儿了吧...

那你只能仿照FTP客户端复制了...

1.分块复制,多开几个线程...不过带宽在那儿摆着呢,效果未必理想...
2.分块小一点,记录分块信息,这样网络中断后就不用重头来了...类似断点续传...
xiaokan1982 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vrhero 的回复:]
既然是域环境为什么不用DFS?不是什么事都需要写代码的...操作系统复制文件比你用任何方法写程序效率更高更安全...
[/Quote]

这些都是美国客户要求的,我们没有办法更改
我们要做的就是把这些文件拷贝过来就ok
vrhero 2009-02-20
  • 打赏
  • 举报
回复
既然是域环境为什么不用DFS?不是什么事都需要写代码的...操作系统复制文件比你用任何方法写程序效率更高更安全...
aimeast 2009-02-20
  • 打赏
  • 举报
回复
这样的情况,速度是怎么都快不了的。
因为中国和美国之间貌似只有两根光缆连接,中间还要经过日本。
且两个国家之间的数据流量又是相当的大。所以速度是不可能有提高。


你说会有拷贝出错的情况,这样的话,你可以自己写个程序。
分Block发送数据,每个Block发送完之后还要附带一个CRC 或者 MD5值。这样可以确保发送文件的正确性。
当然,还要使用多线程。单纯写个这样的程序应该还是非常简单的。
xiaokan1982 2009-02-20
  • 打赏
  • 举报
回复
谢谢楼上的朋友的回复。可能我还是没有表达清楚。
我的情况是,我们是域环境,美国那边是\\share folder这种形式共享的。
我的任务就是把他们的共享拷贝到我的机器上,我已经用C#代码实现了拷贝了。
主要就是用的File.Copy()这个函数,
我现在的目的就是有没有更好,更快,更优化的拷贝方法或算法。

谢谢
vrhero 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaokan1982 的回复:]
补充一下,我们需要对考的两台机器一台在国内,一台在美国,光线连接,到桌面是千M网线。
所以只能用代码来实现对考,不能物理接触
[/Quote]
FTP...文件传输标准...

你们桌面万M也没用...传输速率取决于路由中最小带宽...
soaringbird 2009-02-20
  • 打赏
  • 举报
回复
两台机器都是千M到桌面这两台机器之间就是千M吗?桌面之间的东西还多着呢
wesleyluo 2009-02-20
  • 打赏
  • 举报
回复
学习下,好像有牛人已经写好了 DLL等着你用了。找找吧。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧