我做的是多线程windows服务程序,在线程方法中先遍历语音文件,判断语音文件是不是符合格式标准,如果符合,就调用方法转换,然后把转换好的文件放到指定好的路径下;如果不符合,就把原文件原封不动的复制到目标文件夹下,并删除原文件(因为线程方法执行完一次遍历后sleep一段时间,再继续执行遍历文件的,所以要保证转换完的文件要删除),转换后文件让我删,可是不转换的文件就不让我移动,提示如题的错误“另一个进程正在使用此文件,因此该进程无法访问此文件。”
代码:
 try
      {
         inputFileFormat = audioConverter.CheckSoundFormat(filename);//判断格式,确认已关闭流
         isFormat = true;
       }
        catch(Exception ex)
           {
               isFormat = false;
            }
                 if (isFormat == false)
                  {
                     string pFromPath = inputFile;
                     string pToPath = outputFile;
                     File.Delete(pToPath);
                     File.Move(pFromPath, pToPath);                                
                    //File.Copy(pFromPath, pToPath);
                    //File.Delete(inputFile);  
                   }
                   else
                   {
                      //转换方法调用
                   }
无论是复制还是移动,都提示一样的错误,经过我排查,好像是因为服务在使用这个文件,我手动删除文件,也不让我删,当我把服务停掉,就让我删了,不知道这样的问题得怎么解决?

解决方案 »

  1.   

    void 函数()
    {
    try
    {
    }
    catch
    {
    sleep(0000);
    //有的时候你释放了,可能你的杀毒软件或者其他一些东西在使用,重复执行几次吧
    函数();
    }
    }
      

  2.   

    File.Copy()和File.Move()在测试方法时是没问题的,您的意思是说在线程内使用就会出错?应该不会吧
      

  3.   

    #2楼 那如果是在try中判断文件格式的方法时文件流没关闭,为什么Copy文件好用?只是delete时报错,帮我解释一下呗
      

  4.   

    我又测试了一下,在另一个不是windows 服务的解决方案中加上inputFileFormat = audioConverter.CheckSoundFormat(filename);语句,测试了下,发现提示一样的错误,我设置断点,走了一下,发现果然是打开了文件流,没关闭,现在的问题是咋关闭啊
      

  5.   

    FileInfo f = new FileInfo(sPath);
    if (!File.Exists(dPath))
              f.MoveTo(dPath);FileStream fs= new FileStream("",FileMode.Create);
    try
    {    
    }
    catch(Exception ex)
    {    
      MessageBox.Show(ex.Message);
    }
    finally
     {
      fs.Close();}
      

  6.   

    问题解决,我设置断点走了一下,在一个适当return false;之前加了个fs.Close();它打开的是FileStream fs = new FileStream (inputFile, FileMode.Open, FileAccess.Read);总结了一下,遇到问题还是得认真调试,逐个排除的,没有解决不了的问题,呵呵,谢谢大家帮忙!结贴,给分!