function myfunc(SStr:string):string;
var
  mem:TMemoryStream;
begin
  mem:=TMemoryStream.Create;
  try
    mem.Write(SStr[1],length(SStr));
    mem.SaveToFile('c:\test.txt');
  finally
    mem.Free;
end;这个函数是把传进来的字符串,写到一个文本文件里,我担心的是,当它同时被无数个用户调用的时候,出现:
另一个程序正在使用此文件,进程无法访问。

解决方案 »

  1.   

    那还不简单 文件流加载后,COPY一份给其他流  释放加载文件的流操作副本流,然后保存成文件 覆盖就可以了
      

  2.   


    ----------------
    那你就是蛋疼 超级蛋疼,挑战WINDOWS规则
    解决办法,将文件以流的方式加载到数据库中
      

  3.   

    你的担心是执行到mem.SaveToFile('c:\test.txt');
    的时候别的程序正在使用c:\test.txt这个文件是吧,那你就做异常处理,给提示让别人先不要用呀
    ...
      try
      mem.Write(SStr[1],length(SStr));
      mem.SaveToFile('c:\test.txt');
      except
      showmessage('让我先用呀');
      end
      mem.Free;
    ....
      

  4.   

    waitforsingleobject
    或者CreateFileMapping,别写文件,释放FileMapping的时候再写入而且如果你多进程读写没互斥的话很容易读脏数据
      

  5.   

    写驱动IRQ方式读写、、楼主别想得太简单、用户态是无法访问被其他程序独占方式打开的文件的
      

  6.   

    使用加锁的方式进行同步,用CreateFile以FILE_APPEND_DATA的方式打开文件,再用WriteFile写文件
      

  7.   

    用CreateFile以FILE_APPEND_DATA的方式打开文件,再用WriteFile写文件上面说的就是加锁方式进行同步了吗?
      

  8.   

    不能仅这样,同步需要你自己做,比如用CreateMutex之类的