一个文件发送端,一个文件接收端,
现在文件发送与接收都貌似正常,
问题出现在:
当接收端程序在运行时=======》接收创建的文件大小已经正常,但双击时,提示文件被其它程序占用,无法打开。
只要把接收端程序关闭=======》接收到的文件就一切OK正常。
已经尝试在接收端加了各种关闭。
也在FileStream中加了 using
现在没办法了
发送端关键代码:
NetworkStream ns = tcpClientObj.GetStream();
FileStream fs = new FileStream(@"D:\sogou.exe", FileMode.Open);
int size = 0;//初始化读取的流量为0
long len = 0;//初始化已经读取的流量
while (len < fs.Length)
{
byte[] buffer = new byte[512];
size = fs.Read(buffer, 0, buffer.Length);
ns.Write(buffer, 0, size);
len += size;
//Pro((long)len);
}
fs.Flush();
ns.Flush();
接收端关键代码:
int size = 0;
int len = 0;
NetworkStream ns = clientMem[Thread.CurrentThread.Name].GetStream();
if (ns != null)
{
string fileSavePath = "123.exe";
using (FileStream fs = new FileStream(fileSavePath, FileMode.Create, FileAccess.Write))
{
byte[] buffer = new byte[512];
while ((size = ns.Read(buffer, 0, buffer.Length)) > 0 || ns.DataAvailable == false)
{
fs.Write(buffer, 0, size);
len += size;
}
fs.Flush();
fs.Dispose();
fs.Close();
ns.Flush();
ns.Dispose();
ns.Close();
Thread.CurrentThread.Abort(); //(接收端是多线程,其实感觉没必要关闭,没办法了,只能把所有用到的都关闭,但还是提示占用)
return;
}
}
------解决思路----------------------
确定客户端的线程 彻底关闭了么
------解决思路----------------------
我什么时候说文件是被其他程序占用了
我是让你找找你的程序里是否还有其他代码去使用它
比如你是否接收到文件后又执行了move,重命名等操作