多个程序同时访问一个目录里的文件(都是遍历该文件夹),操作也一样:读取一个文件,并做相应处理,然后删除如何避免访问冲突啊,各位大哥帮帮忙!谢谢(注:因为这个目录里的文件很多,而且会不断生成,所以想能运行多个程序同时处理)

解决方案 »

  1.   

    每个程序都以独占方式打开文件,处理完删除。
    fm := TFileStream.Create( fmOpenReadWrite or mShareExclusive );
    然后加异常处理,打不开就算了,嗬嗬。
      

  2.   

    是只读的啊,只读方式打开,读出处理,关闭文件,删除我现在用的是这种流程,不过试了一下不行啊,很容易产生异常
    比如程序A关闭一个文件时,程序B刚好遍历到这个文件,接着打开这个文件,而程序A此时却要删除这个文件
      

  3.   

    大家帮忙看看我的这段代码:if FindFirst('d:\delphitest\gif\' + '*.*', faAnyFile, SR) = 0 then
      begin
        if not (sr.Attr = faDirectory) then
        begin
          try
          AssignFile(fi, 'd:\delphitest\gif\'+Sr.Name);
          Reset(fi);
          //处理...........
          finally
            closefile(fi);
          end;      try
          MoveFile(PChar('d:\delphitest\gif\'+Sr.Name), PChar('d:\delphitest\2\'+Sr.Name));
          except
          end;
        end;    while FindNext(sr) = 0 do
        begin
          if not (sr.Attr = faDirectory) then
          begin
            form1.Memo1.Lines.Add(Sr.Name);
            try
            AssignFile(fi, 'd:\delphitest\gif\'+Sr.Name);
            Reset(fi);
            //处理.......
            finally
            closefile(fi);
            end;
            try
            MoveFile(PChar('d:\delphitest\gif\'+Sr.Name), PChar('d:\delphitest\2\'+Sr.Name));
            except
            end;
          end;
        end;
        FindClose(sr);
      end;
      

  4.   

    try
          AssignFile(fi, 'd:\delphitest\gif\'+Sr.Name);
          Reset(fi);
          //处理...........
        finally
            closefile(fi);
        end;
    改为如下这样呢?
       try
          AssignFile(fi, 'd:\delphitest\gif\'+Sr.Name);
          Reset(fi);
          //处理...........
       except
          closefile(fi);
       end;
      

  5.   

    to flyinwuhan:
    我知道是要独占方式打开啊,但是我不知道用AssignFile读文本文件怎么指定独占方式呀,不要笑我哦上面那段代码我都有回异常处理了,不过运行时还是会弹出错误框另外,还有一个问题,就是我要删除这个文件的时候如果删除不了的话,就会造成一个文件处理了两次啊,这样不行各位大侠出招
      

  6.   

    to flyinwuhan:
    改成except的话,如果没有产生异常,是不是没有把文件关闭了
      

  7.   

    对,改成except的话,如果没有产生异常,是不是没有把文件关闭了
    应该加上try
          AssignFile(fi, 'd:\delphitest\gif\'+Sr.Name);
          Reset(fi);
          //处理...........
       except
          closefile(fi);
       end;
    closefile(fi);
      

  8.   

    to flyinwuhan:
    谢谢啊,我用TFileStream.Create以独方式打开还是会出错,奇怪try都没用了?to softwaiter:
    听不懂你说的话啊
      

  9.   

    to flyinwuhan:
    如果跟踪调试的话可能就不一定会出现冲突的情况了还有没有哪位大侠帮帮出出主意呀
      

  10.   

    如果跟踪调试的话可能就不一定会出现冲突的情况了----------那就采用输出log文件的办法。呵呵,我是没有其他办法了。
      

  11.   

    {  
       比如程序A关闭一个文件时,程序B刚好遍历到这个文件,接着打开这个文件,而程序A此时却要删除这个文件
    }
       1。你的流程有问题,明显是多线程的同步嘛?   2。程序A--线程A吧?