当前位置: 代码迷 >> C# >> []FileStream 导致的文件被占用有关问题
  详细解决方案

[]FileStream 导致的文件被占用有关问题

热度:348   发布时间:2016-05-05 04:57:39.0
[求助]FileStream 导致的文件被占用问题
一个文件发送端,一个文件接收端,
现在文件发送与接收都貌似正常,
问题出现在: 
当接收端程序在运行时=======》接收创建的文件大小已经正常,但双击时,提示文件被其它程序占用,无法打开。
只要把接收端程序关闭=======》接收到的文件就一切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,重命名等操作