如何判断一个文件是否已经被打开?(50分)

  • 主题发起人 主题发起人 brightangel
  • 开始时间 开始时间
B

brightangel

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用比较简单的方法判断一个文件是否被任何一个程序以任何方式使用?
请高手指教。
 
请试试WINDOWS API函数,查找当前的文件的状态,再进行判断.
 
用哪个API函数,能详细点吗?
不胜感激!
 
当一个文件程序正在使用,文件是受到保护的,可用MoveFile 尝试移动文件,失败即在使用。
 
to David Jiang:
您的方法对HTML文件就不适用.
 
MoveFile不行,只对可执行文件有效。
 
尝试写它,要是不行,就说明。。。
 
可是我觉得如果不是有程序在Exclusive的使用,写是没问题的...
 
同意crystal,例如文本文件,
即使你用NotePad打开它,在程序也是可以写的。
 
GetFileAttributes
具体自己看msdn吧
 
确实是用getfileattributes,得到FILE_ATTRIBUTE_TEMPORAR,因为如果文件被打开
那么在系统的缓存中一定有此文件,所以得到值包含FILE_ATTRIBUTE_TEMPORARY
 
function IsFileInUse(fName : string) : boolean;
var
HFileRes : HFILE;
begin
Result := false;
if not FileExists(fName) then
exit;
HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,
0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes);
end;
 
你可以监视文件调用API,如果读或写操作与你所指定的文件相同,就...OK?
 
only you 的方法很好,判断word,excel文档都正确,
但对文本文件好象不适用。
我用notepad打开文本文件后再用only you的方法判断,
结果是文件未被使用,难道notepad载入文本后,
就关闭了文件句柄吗?
或者文本文件本身就与word等其它文件不同?
请指教!
 
Notepad的确是在文件载入后关闭文件句柄,所有的操作
在自己的内存里处理,所以才会有64K文件限制.
 
写字板打开文本文件后好象也一样。
那么写字板处理的文件长度有限制吗?
如果有,限制是多少呢?
 
注意!Notepad只有在Windows95-98下才有64K限制,当在真正的32位操作系统NT40下时这个限制
将取消,并且其采用与其他文件同样的读写机制!
 
尝试用独占方式打开呗. 如果打不开就是正在使用.
 
多人接受答案了。
 
后退
顶部