아래와 같이 하시면 가능할것 같네요.
procedure OpenForShare(const FileName: String);
var
FileHandle : Integer;
begin
FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
if FileHandle > 0 then
{valid file handle}
//파일이 다른 유저가 사용중이지 않습니다.
else
{Open error: FileHandle = negative DOS error code}
//파일이 다른 유저가 사용중입니다.
end;
function OpenForShare(const FileName: String):boolean;
var FileHandle : Integer; beExclusive:boolean;
begin
beExclusive:=false;
FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
if FileHandle > 0
then beExclusive:=true
else beExclusive:=false;
Result:=beExclusive;
end;
Procedure ReadFile;
begin
....
if OpenForShare(network_path+filename) then
begin
Assign(txtfile, network_path+filename);
Reset(txtfile);
...
end else
begin
Beep;
ShowMessage('File is occupied! Wait until.....');
end;
.....
이렇게 처리했는데... 네트웍상의 모든 컴퓨터에서 파일이 읽힙니다...
엉엉... 도와주세요
어카면 이미 Open된 화일의 접근을 막을수 있을까요....
현재 님께서 Open되어 있는 파일을 막을려고 하시는 대상이 Local PC가 아닌 Remote PC인것 같네요. 맞나요? 그렇다면 network_path를 어떻게 선언했는지를 알아야 할것 같네요.
만일 Local PC라면 예를 들어 현재 실행하고 있는 프로그램의 디렉토리에 있는 특정 파일(Test.exe)이라면
FileOpen(ExtractFilePath(ParamStr(0)) + 'Test.exe'))로 하면 될것 같네요.
아무튼 network_path가 어떤 식으로 선언한것이냐에 따라 달라질 수 있네요..
답변이 되었는지 모르겠습니다.
procedure OpenForShare(const FileName: String);
var
FileHandle : Integer;
begin
FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
if FileHandle > 0 then
{valid file handle}
//파일이 다른 유저가 사용중이지 않습니다.
else
{Open error: FileHandle = negative DOS error code}
//파일이 다른 유저가 사용중입니다.
end;