流写文件时出现另一个程序正在使用此文件,进程无法访问。

lcmlhs_2005 2011-04-22 02:41:49
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;

这个函数是把传进来的字符串,写到一个文本文件里,我担心的是,当它同时被无数个用户调用的时候,出现:
另一个程序正在使用此文件,进程无法访问。
...全文
1109 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcmlhs_2005 2011-05-03
  • 打赏
  • 举报
回复
暂时结了吧,虽然我不是很满意
Lactoferrin 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lcmlhs_2005 的回复:]

用CreateFile以FILE_APPEND_DATA的方式打开文件,再用WriteFile写文件

上面说的就是加锁方式进行同步了吗?
[/Quote]
不能仅这样,同步需要你自己做,比如用CreateMutex之类的
lcmlhs_2005 2011-04-28
  • 打赏
  • 举报
回复
用CreateFile以FILE_APPEND_DATA的方式打开文件,再用WriteFile写文件

上面说的就是加锁方式进行同步了吗?
CaiBirdy 2011-04-25
  • 打赏
  • 举报
回复
写驱动IRQ方式读写、、楼主别想得太简单、用户态是无法访问被其他程序独占方式打开的文件的
lcmlhs_2005 2011-04-25
  • 打赏
  • 举报
回复
追加追加, 我要的是追加
Lactoferrin 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lcmlhs_2005 的回复:]

追加追加, 我要的是追加
[/Quote]
使用加锁的方式进行同步,用CreateFile以FILE_APPEND_DATA的方式打开文件,再用WriteFile写文件
lcmlhs_2005 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiap1723 的回复:]
引用 8 楼 lcmlhs_2005 的回复:

给点代码来,关键是同时读这个文件怎么办???在单位时间里同时读这个文件


----------------
那你就是蛋疼 超级蛋疼,挑战WINDOWS规则


解决办法,将文件以流的方式加载到数据库中
[/Quote]

我没有蛋疼,我是真心实意地求解的
Lactoferrin 2011-04-23
  • 打赏
  • 举报
回复
如果有无数个用户写这个文件,你想要的效果是什么?是后来的覆盖前面的还是追加。
路痴哥斯拉 2011-04-22
  • 打赏
  • 举报
回复
waitforsingleobject
或者CreateFileMapping,别写文件,释放FileMapping的时候再写入

而且如果你多进程读写没互斥的话很容易读脏数据
goodhj 2011-04-22
  • 打赏
  • 举报
回复
你的担心是执行到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;
....
linzhengqun 2011-04-22
  • 打赏
  • 举报
回复
同时读是没有任何问题的,问题在于同时写。
风之谷 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lcmlhs_2005 的回复:]

给点代码来,关键是同时读这个文件怎么办???在单位时间里同时读这个文件
[/Quote]

----------------
那你就是蛋疼 超级蛋疼,挑战WINDOWS规则


解决办法,将文件以流的方式加载到数据库中
lcmlhs_2005 2011-04-22
  • 打赏
  • 举报
回复
给点代码来,关键是同时读这个文件怎么办???在单位时间里同时读这个文件
风之谷 2011-04-22
  • 打赏
  • 举报
回复
那还不简单 文件流加载后,COPY一份给其他流 释放加载文件的流

操作副本流,然后保存成文件 覆盖就可以了
lcmlhs_2005 2011-04-22
  • 打赏
  • 举报
回复
工资上万的大牛们出来接招啊, 我这个小问题还搞不定吗?
浩南_哥 2011-04-22
  • 打赏
  • 举报
回复
如果是你自己的程序多个线程访问的话就好办
关键怕别的进程以独占的方式打开
lcmlhs_2005 2011-04-22
  • 打赏
  • 举报
回复
难道不能以共享的方式打开进行读写吗????
浩南_哥 2011-04-22
  • 打赏
  • 举报
回复
强制干掉正在访问这个文件的进程
zkroy36 2011-04-22
  • 打赏
  • 举报
回复
再操作前,先判断该文件是否在被使用!
bdmh 2011-04-22
  • 打赏
  • 举报
回复
那你只能避免别人别操作了

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧