Maxizar
fmShareDenyNone?
Модератор: Модераторы
f := TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
case (mode and (fmShareCompat or fmShareExclusive or fmShareDenyWrite or fmShareDenyRead or fmShareDenyNone)) of
fmShareCompat,
fmShareExclusive:
lockop:=LOCK_EX or LOCK_NB;
fmShareDenyWrite:
lockop:=LOCK_SH or LOCK_NB;
fmShareDenyNone:
exit;
else
begin
{ fmShareDenyRead does not exit under *nix, only shared access
(similar to fmShareDenyWrite) and exclusive access (same as
fmShareExclusive)
}
repeat
closeres:=FpClose(Handle);
until (closeres<>-1) or (fpgeterrno<>ESysEINTR);
DoFileLocking:=-1;
exit;
end;
end;
ShareMode: array[0..4] of Integer = (
0,
0,
FILE_SHARE_READ,
FILE_SHARE_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE);
Var
FN : string;
begin
FN:=FileName+#0;
result := CreateFile(@FN[1], dword(AccessMode[Mode and 3]),
dword(ShareMode[(Mode and $F0) shr 4]), nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
procedure TForm1.Button1Click(Sender: TObject);
var
f : TFileStream;
begin
if OpenDialog1.Execute then
begin
Try
f := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);
f.Seek(0, soFromBeginning);
//Работаем
finally
f.Free;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var F:THandle;
begin
if OpenDialog1.Execute then
Try
F :=FileOpen(OpenDialog1.FileName, fmOpenRead or fmShareDenyNone);
FileSeek(F,0,1) ;
//Работаем
finally
FileClose(F);
end;
end;
Maxizar писал(а):Уже можно оформить как минимум: Проблема-решение,
MageSlayer писал(а):Хай all
Бьюсь над задачкой:
Как _кроссплатформенно_ открыть файл лога на запись, а остальным процессам дать возможность читать его, пока он еще не закрыт.
Ну и естественно, файл лог должен сам создаваться, если еще не был создан и урезаться до нулевой длины при открытии на запись.
Хочется сделать без лишних хаков - и никак
if not FileExists(GlobalConfig.DebugLogFile) then begin
try
F:=TFileStream.Create( GlobalConfig.DebugLogFile, fmCreate); F.Free;
except
Exit; // не могу содать log-file
end;
end;
F:=TFileStream.Create( GlobalConfig.DebugLogFile, fmOpenReadWrite or fmShareDenyWrite );
Mr.Smart писал(а):alexs просветите пожалуйста не въехавших, что означает "fb2"
alexs писал(а):И простой до безобразия.
F:=TFileStream.Create( GlobalConfig.DebugLogFile, fmCreate or fmShareDenyWrite)
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6