baidu_35425984 2016-06-26 01:40 采纳率: 0%
浏览 6433

C# 读取文件后删除提示被占用但是我已经释放了资源啊?

DirectoryInfo dir = new DirectoryInfo(@"FingerImage");
try
{
foreach (FileInfo fileInfo in dir.GetFiles("*.bmp"))
{
MessageBox.Show(fileInfo.Name,"INFO");
byte[] nameTemp = Encoding.Default.GetBytes(Path.GetFileName(fileInfo.FullName));
byte[] recvBuf = new byte[32];

                using (FileStream picture = fileInfo.OpenRead())
                {
                    byte[] picsize = new byte[fileInfo.Length + 4096];
                    picture.Read(picsize, 0, picsize.Length - 1);
                    picture.Dispose();
                    picture.Close();
                    GC.ReRegisterForFinalize(picture);
                    GC.ReRegisterForFinalize(fileInfo);

                    string nameStr = "IMAGE<#>" + Encoding.UTF8.GetString(nameTemp).Length + "<#>" + Encoding.UTF8.GetString(nameTemp) + "<#>" + picsize.Length + "<#>|END|";
                    byte[] name = Encoding.UTF8.GetBytes(nameStr);
                    //发送图片名
                    sockClient.Send(name);
                    //接受反馈
                    int iRet = sockClient.Receive(recvBuf);
                    if (iRet == 0)
                    {
                        MessageBox.Show("服务器异常", "提示:");
                        flag = false;
                    }
                    else
                    {
                        if (String.Compare(Encoding.Default.GetString(recvBuf), "YES") == 0)
                        {
                            sockClient.Send(picsize);
                            //发送图片
                            iRet = sockClient.Receive(recvBuf);
                            if (iRet == 0)
                            {
                                MessageBox.Show("服务器异常", "提示:");
                                flag = false;
                            }
                            else
                            {
                                if (String.Compare(Encoding.Default.GetString(recvBuf), "YES") == 0)
                                {
                                    MessageBox.Show("上传成功", "提示:");
                                }
                                else
                                {
                                    lab_msg.Text = Encoding.Default.GetString(recvBuf);
                                    flag = false;
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show(Encoding.Default.GetString(recvBuf), "提示:");
                            flag = false;
                        }
                    }
                }
                //if (File.Exists(fileInfo.FullName))
                //{
                //    File.Delete(fileInfo.FullName);
                //}提示被占用
                //FileStream picture = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read);

            }
            Directory.Delete(dir.FullName,true);//可以删除,但是最后一张提示被占用,无法删除
        }
        catch (Exception e)
        {
            MessageBox.Show(this, e.Message, "客户端异常");
        }

  • 写回答

2条回答 默认 最新

  • baidu_35425984 2016-06-26 02:36
    关注
     string[] fileNames = Directory.GetFiles(@"FingerImage","*.bmp");
                try
                {
                    foreach (string item in fileNames)
                    {
                        MessageBox.Show(item, "INFO");
                        byte[] recvBuf = new byte[32];
                        FileStream picture = new FileStream(item, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                        int index = item.LastIndexOf(@"\");
                        string filename = item.Substring(index + 1, item.Length - index - 1);
                        MessageBox.Show(filename, "INFO");
                        byte[] picsize = new byte[picture.Length + 4096];
                        picture.Read(picsize, 0, picsize.Length - 1);
                        picture.Dispose();
                        picture.Close();
                        GC.ReRegisterForFinalize(picture);
    
                        string nameStr = "IMAGE<#>" + filename.Length + "<#>" + filename + "<#>" + picsize.Length + "<#>|END|";
                        byte[] name = Encoding.UTF8.GetBytes(nameStr);
                        //发送图片名
                        sockClient.Send(name);
                        //接受反馈
                        int iRet = sockClient.Receive(recvBuf);
                        if (iRet == 0)
                        {
                            MessageBox.Show("服务器异常", "提示:");
                            flag = false;
                        }
                        else
                        {
                            if (String.Compare(Encoding.Default.GetString(recvBuf), "YES") == 0)
                            {
                                sockClient.Send(picsize);
                                //发送图片
                                iRet = sockClient.Receive(recvBuf);
                                if (iRet == 0)
                                {
                                    MessageBox.Show("服务器异常", "提示:");
                                    flag = false;
                                }
                                else
                                {
                                    if (String.Compare(Encoding.Default.GetString(recvBuf), "YES") == 0)
                                    {
                                        MessageBox.Show("上传成功", "提示:");
                                    }
                                    else
                                    {
                                        lab_msg.Text = Encoding.Default.GetString(recvBuf);
                                        flag = false;
                                    }
                                }
                            }
                            else
                            {
                                MessageBox.Show(Encoding.Default.GetString(recvBuf), "提示:");
                                flag = false;
                            }
                        }
                        File.Delete(item);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(this, e.Message, "客户端异常");
                }
    

    我尝试改了代码,但是还是不行,删除单个文件时报异常被占用,删除整个目录最后一个无法删除

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题