TFilestreamを使用してネットワーク共有(ローカル)に書き込もうとしています。ネットワーク接続がインターラプトされないと、すべて正常に動作します。TFilestreamを使用してネットワーク共有に書き込むと、ネットワークが失われたときにファイルがロックされます。
ただし、ネットワークケーブルをプルしてから再接続すると、アクセス制限によりファイルストリームを開く試みが失敗します。私もエクスプローラでファイルを削除することはできません!それはTFilestreamがファイルをロックしているように見えます。これを回避するには、リブートするしかありません。
私のアプリケーションでは、ファイルを開いたままにしています(毎秒1回書き込まれるログファイルです)。失敗
私のコードは以下の通りです:誰もが何かアドバイスがあり
procedure TFileLogger.SetLogFilename(const Value: String);
var line : String;
Created : Boolean;
begin
if not DirectoryExists(ExtractFilePath(Value)) then //create the dir if it doesnt exist
begin
try
ForceDirectories(ExtractFilePath(Value));
except
ErrorMessage(Value); //dont have access to the dir so flag an error
Exit;
end;
end;
if Value <> FLogFilename then //Either create or open existing
begin
Created := False;
if Assigned(FStream) then
FreeandNil(FStream);
if not FileExists(Value) then //create the file and write header
begin
//now create a new file
try
FStream := TFileStream.Create(Value,fmCreate);
Created := True;
finally
FreeAndNil(FStream);
end;
if not Created then //an issue with creating the file
begin
ErrorMessage(Value);
Exit;
end;
FLogFilename := Value;
//now open file for writing
FStream := TFileStream.Create(FLogFilename,fmOpenWrite or fmShareDenyWrite);
try
line := FHeader + #13#10;
FStream.Seek(0,soFromEnd);
FStream.Write(Line[1], length(Line));
FSuppress := False;
except
ErrorMessage(Value);
end;
end else begin //just open it
FLogFilename := Value;
//now open file for writing
FStream := TFileStream.Create(FLogFilename,fmOpenWrite or fmShareDenyWrite); //This line fails if the network is lost and then reconnected
end;
end;
end;
場合、それをいただければ幸いです。
これは本当にTFileStreamの問題ですか?その場合は、CreateFileのようなものを使用してください。 –