var
GENERIC_READ: FILE_SHARE_READ;
GENERIC_WRITE : FILE_SHARE_WRITE;
заблокированный файл.
Есть как минимум два способа сделать это, но один из них, при помощи Windows API (LockFileEx и UnlockFileEx) используя параметр LOCKFILE_EXCLUSIVE_LOCK не очень хорош на мой взгляд.
Поэтому предлагаю другой способ, путём создания файла при помощи функции OpenFile:
hMyLockedFile := OpenFile( 'c:\variables.dat', ofStruct, OF_CREATE Or OF_READWRITE Or OF_SHARE_EXCLUSIVE );
заранее спс!
f:=CreateFile('f:\qqq.txt',GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
Третий параметр задаёт флаги совместного доступа
FILE_SHARE_READ кто-то другой сможет открыть файл на чтение
FILE_SHARE_WRITE кто-то другой сможет открыть файл на запись
Суть блокировки заключается в том что ты открываешь файл не указав флаги совместного доступа (третий параметр равен нулю), следовательно никто другой несможет открыть файл (т.е. получить хендл) даже на чтение. Если нельзя открыть файл (если нет хендла) значит нельзя работать с файлом.
var
GENERIC_READ: FILE_SHARE_READ;
GENERIC_WRITE : FILE_SHARE_WRITE;
begin
CreateFile('f:\qqq.txt',GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
end;
Вот ошибки
[Error] Unit1.pas(28): '..' expected but ';' found
[Error] Unit1.pas(29): '..' expected but ';' found
[Warning] Unit1.pas(31): Constant 0 converted to NIL
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Код:
что за бред?
делай так:
Код:
var
h:THandle;
procedure TForm1.Button1Click(Sender: TObject);
begin
h:=CreateFile('f:\qqq.txt',GENERIC_READ+GENERIC_WRITE ,0,0,OPEN_EXISTING,0,0);
end;
h:THandle;
procedure TForm1.Button1Click(Sender: TObject);
begin
h:=CreateFile('f:\qqq.txt',GENERIC_READ+GENERIC_WRITE ,0,0,OPEN_EXISTING,0,0);
end;
для разблокировки создаёшь ещё одну кнопку и в ней пишешь
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
CloseHandle(h);
end;
begin
CloseHandle(h);
end;