FIX: Some fixes for bug [2954358] error with write permissions

This commit is contained in:
Alexander Koblov 2010-02-18 22:22:07 +00:00
commit c2d8744b4b
2 changed files with 38 additions and 14 deletions

View file

@ -132,32 +132,54 @@ end;
procedure TfrmLinker.btnOKClick(Sender: TObject);
var
c:integer;
fTarget,fSource:TFileStreamEx;
c: Integer;
fTarget: TFileStreamEx = nil;
fSource: TFileStreamEx = nil;
begin
if mbForceDirectory(ExtractFileDir(edSave.Text)) then
begin
try
fTarget:=TFileStreamEx.Create(edSave.Text,fmCreate);
try
prbrWork.Max:=lstFile.Items.Count;
prbrWork.Position:=0;
for c:=0 to lstFile.Items.Count-1 do
begin
try
fSource:=TFileStreamEx.Create(sDirectory+PathDelim
+lstFile.Items[c],fmOpenRead);
try
fTarget.CopyFrom(fSource,fSource.Size);
prbrWork.Position:=prbrWork.Position+1;
finally
FreeAndNil(fSource);
FreeThenNil(fSource);
end;
except
on E: EFOpenError do
begin
MessageDlg(Caption, rsMsgErrEOpen + ': ' + E.Message, mtError, [mbOK], 0);
Exit;
end;
on E: EReadError do
begin
MessageDlg(Caption, rsMsgErrERead + ': ' + E.Message, mtError, [mbOK], 0);
Exit;
end;
end;
ShowMessage(rsLinkMsgOK);
finally
FreeAndNil(fTarget);
FreeThenNil(fTarget);
prbrWork.Position:=0;
end;
except
on E: EFCreateError do
begin
MessageDlg(Caption, rsMsgErrECreate + ': ' + E.Message, mtError, [mbOK], 0);
Exit;
end;
on E: EWriteError do
begin
MessageDlg(Caption, rsMsgErrEWrite + ': ' + E.Message, mtError, [mbOK], 0);
Exit;
end;
end;
end;

View file

@ -51,7 +51,7 @@ type
implementation
uses
uLng, uClassesEx, uOSUtils;
LCLProc, uLng, uClassesEx, uOSUtils;
function ShowSplitterFileForm(const sFile: TStringList; const sTargetDir: String): Boolean;
begin
@ -106,9 +106,11 @@ end;
procedure TfrmSplitter.btnOKClick(Sender: TObject);
var iFileSize:int64;
i,num:integer;
fSource,fDest:TStream;
var
iFileSize:int64;
i,num:integer;
fSource: TFileStreamEx = nil;
fDest: TFileStreamEx = nil;
begin
memWatch.Clear;
prgbrDoIt.Position:=0;
@ -187,7 +189,7 @@ begin
IntToStr(iFileSize)+'b');
prgbrDoIt.Position:=prgbrDoIt.Position+1;
finally
fDest.Free;
FreeThenNil(fDest);
end;
inc(i);
except
@ -217,7 +219,7 @@ begin
IntToStr(fSource.Size-(iFileSize*i))+'b');
prgbrDoIt.Position:=prgbrDoIt.Position+1;
finally
fDest.Free;
FreeThenNil(fDest);
end;
except
on E: EFCreateError do
@ -232,7 +234,7 @@ begin
end;
end;
finally
fSource.Free;
FreeThenNil(fSource);
end;
end;