我有一个关于Stream类的CopyTo()方法的问题:
http://msdn.microsoft.com/en-us/library/dd782932(v=vs.110).aspx
这种方法适用于大约15kb的小文件,因为我尝试过,但是更高(我测试了2mb,4 mbs等),它只是挂在CopyTo()方法上。无法弄明白为什么,这就是为什么我要问SO的无所不知的人:)
代码示例:
服务器处理客户端:
public void HandleClient(object c)
{
string path = "some path";
using (TcpClient client = (TcpClient)c)
{
using (NetworkStream netStream = client.GetStream())
{
using (FileStream fileStream = new FileStream(path, FileMode.Create))
{
netStream.CopyTo(fileStream);
}
}
}
}
客户发送:
public void Send()
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("some address"), 12345);
string path = "some path";
using (TcpClient client = new TcpClient(remoteEndPoint))
{
using (NetworkStream netStream = client.GetStream())
{
using (FileStream fileStream = new FileStream(path, FileMode.Open))
{
fileStream.CopyTo(netStream);
}
}
}
}
P.S。在我研究网络编程的过程中,我经常发现人们建议其他人切换到WCF来完成这类任务,因为显然,WCF使一切变得更加容易。你们有什么建议,你能为WCF noob提供一些链接,这对于建立局域网文件共享应用程序非常有用,因为我的目标是什么?
答案 0 :(得分:0)
我设法解决了CopyTo()问题。问题是我在主线程上发送文件,所以整个应用程序只需要更大的文件,这需要超过一瞬间传输。
将发送操作放在一个单独的线程中并测试发送最多3 GB,按预期工作。现在,有什么办法可以跟踪CopyTo()操作的进度吗?在我看来,如果我想跟踪进度,我不能手动转移。
感谢所有参与者:)
答案 1 :(得分:-1)
我不确定您是否可以使用大于缓冲区大小的文件执行CopyTo。也许,您可以尝试通过将每个缓冲区大小的文件拆分来编写它。