Problema ao escrever em arquivo
Estou com problema ao escrever em um arquivo, estou tendo uma exception.....se alguém puder me ajudar, o código segue abaixo.
desde já agradeço.
procedure TForm1.Button1Click(Sender: TObject); var arquivo:TextFile; data:string; lista:TStringList; begin data:=DateTimeToStr(Now); data:=stringReplace(data, '/', '', [rfReplaceAll]); data:=stringReplace(data, ':', '', [rfReplaceAll]); data:=stringReplace(data, ' ', '_', [rfReplaceAll]); Delete(data,5,2); ExtractStrings(['.'],[' '],PChar('C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB'),lista); AssignFile(arquivo,GetCurrentDir+'\text.bat'); Rewrite(arquivo); Writeln(arquivo,'@echo off'); Writeln(arquivo,'set isc_user=SYSDBA'); Writeln(arquivo,'set isc_password=Msol1000'); Writeln(arquivo,'GBAK -G -B -V'); Writeln('"C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB"'); Writeln('TEMP.FBK'); WriteLn(arquivo,'RENAME "C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB" "'+lista.Strings[0]+'_'+data+'.'+lista.Strings[1]+'"'); WriteLn(arquivo,'GBAK -G -R -V -P 4096 \TEMP.FBK" "C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB"'); CloseFile(arquivo); end;desde já agradeço.
Wagner_teixeira
Curtidas 0
Respostas
Wagner_teixeira
02/07/2011
Estou com problema ao escrever em um arquivo, estou tendo uma exception.....se alguém puder me ajudar, o código segue abaixo.
desde já agradeço.
procedure TForm1.Button1Click(Sender: TObject); var arquivo:TextFile; data:string; lista:TStringList; begin data:=DateTimeToStr(Now); data:=stringReplace(data, '/', '', [rfReplaceAll]); data:=stringReplace(data, ':', '', [rfReplaceAll]); data:=stringReplace(data, ' ', '_', [rfReplaceAll]); Delete(data,5,2); ExtractStrings(['.'],[' '],PChar('C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB'),lista); AssignFile(arquivo,GetCurrentDir+'\text.bat'); Rewrite(arquivo); Writeln(arquivo,'@echo off'); Writeln(arquivo,'set isc_user=SYSDBA'); Writeln(arquivo,'set isc_password=Msol1000'); Writeln(arquivo,'GBAK -G -B -V'); Writeln('"C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB"'); Writeln('TEMP.FBK'); WriteLn(arquivo,'RENAME "C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB" "'+lista.Strings[0]+'_'+data+'.'+lista.Strings[1]+'"'); WriteLn(arquivo,'GBAK -G -R -V -P 4096 TEMP.FBK C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB"'); CloseFile(arquivo); end;desde já agradeço.
GOSTEI 0
Marco Salles
02/07/2011
Vc não disse qual o erro que esta dando
So uma curiosidade , ja que vc esta usando um Tstrings
ExtractStrings(['.'],[' '],PChar('C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB'),lista);
eu não estou vendo vc instanciar a Lista ... Vai dar problema de acesso violado
Tmbém não estou vendo vc carregar-la :..
So uma curiosidade , ja que vc esta usando um Tstrings
ExtractStrings(['.'],[' '],PChar('C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\FUNCIONARIO.GDB'),lista);
eu não estou vendo vc instanciar a Lista ... Vai dar problema de acesso violado
Tmbém não estou vendo vc carregar-la :..
GOSTEI 0
Wagner_teixeira
02/07/2011
Obrigado por sua resposta MARCO ANTONIO SALLES, mas ja mudei um pouco minha linha de raciocinio ai, e realmente a nao tinha inicializado a stringlist.
agora estou com um problema parecido, gero um arquivo texto, so que ele esta sendo escrito pela metade, segue o codigo:
o resultado no arquivo texto:
criei um topico do mesmo assunto no ActiveDelphi, se quiser acompanhar por la tb...http://www.activedelphi.com.br/forum/viewtopic.php?p=345582#345582
agora estou com um problema parecido, gero um arquivo texto, so que ele esta sendo escrito pela metade, segue o codigo:
if rbDescorromper.Checked then begin try try AssignFile(arquivo,diretoriocorrente+'\temp.bat'); Rewrite(arquivo); Writeln(arquivo,'@echo off'); Writeln(arquivo,'set isc_user=SYSDBA'); Writeln(arquivo,'set isc_password=Msol1000'); Writeln(arquivo,'GBAK -G -B -V "'+edtEntrada1.Text+'" TEMP.FBK'); WriteLn(arquivo,'RENAME "'+edtEntrada1.Text+'" "'+ExtractFileName(ChangeFileExt(edtEntrada1.Text, '') +'_' + FormatDateTime('ddmmyy"_"hhnnss', Now)+ ExtractFileExt(edtEntrada1.Text))); WriteLn(arquivo,'GBAK -G -R -V -P 4096 TEMP.FBK "'+edtEntrada1.Text+'"'); Writeln(arquivo,'DEL TEMP.FBK'); Writeln(arquivo,'pause'); if not ExecutarCMD(diretoriocorrente+'\temp.bat') then ShowMessage('Houve um erro ao executar o comando no prompt, provavelmente o arquivo temporario de execuçao nao esta sendo criado normalmente'); finally CloseFile(arquivo); DeleteFile(diretoriocorrente+'\temp.bat'); end; except ShowMessage('Houve um erro ao executar o comando no prompt, provavelmente o arquivo temporario de execuçao nao esta sendo criado normalmente'); end; end;o resultado no arquivo texto:
@echo off set isc_user=SYSDBA set isc_password=Msol1000 GBAK -G -B -V "C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\SISTEMA.GDB" TEMP.FBK RENAME "C:\Users\wagner\Desktop\Wagner\FirebirdCadfunc\BD\SISTEMA.GDB" "SISTEMA_020711_172407.GDB GBAK -G -R
criei um topico do mesmo assunto no ActiveDelphi, se quiser acompanhar por la tb...http://www.activedelphi.com.br/forum/viewtopic.php?p=345582#345582
GOSTEI 0
Marco Salles
02/07/2011
engraçado , vc esta fechando e logo apos o deletando ???
CloseFile(arquivo);
DeleteFile(diretoriocorrente+'\temp.bat');
CloseFile(arquivo);
DeleteFile(diretoriocorrente+'\temp.bat');
GOSTEI 0
Wagner_teixeira
02/07/2011
sim, eu monto o arquivo, executo ele no prompt e deleto (pelo menos essa é a ideia).
segue a funçao ExecutarCMD
function TForm1.ExecutarCMD(cmd: string): boolean;var SUInfo: TStartupInfo; ProcInfo: TProcessInformation;begin FillChar(SUInfo, SizeOf(SUInfo), #0); SUInfo.cb := SizeOf(SUInfo); SUInfo.dwFlags := STARTF_USESHOWWINDOW; SUInfo.wShowWindow := SW_SHOW; Result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PansiChar(diretoriocorrente), SUInfo, ProcInfo);
if (Result) then begin WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end;end;
segue a funçao ExecutarCMD
function TForm1.ExecutarCMD(cmd: string): boolean;var SUInfo: TStartupInfo; ProcInfo: TProcessInformation;begin FillChar(SUInfo, SizeOf(SUInfo), #0); SUInfo.cb := SizeOf(SUInfo); SUInfo.dwFlags := STARTF_USESHOWWINDOW; SUInfo.wShowWindow := SW_SHOW; Result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PansiChar(diretoriocorrente), SUInfo, ProcInfo);
if (Result) then begin WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end;end;
GOSTEI 0
Marco Salles
02/07/2011
Mas se vc o esta destruindo , como vc sabe que ele esta pela metade ????
Se tivesse algum erro , o excpet iria ser acionado.. E isto vc não mencionou
Se tivesse algum erro , o excpet iria ser acionado.. E isto vc não mencionou
GOSTEI 0
Wagner_teixeira
02/07/2011
comentei a linha DeleteFile(diretoriocorrente+'\temp.bat'); pra ver o que escreveu.
e não esta gerando exception na execução.
e não esta gerando exception na execução.
GOSTEI 0
Wagner_teixeira
02/07/2011
Problema resolvido no link que postei acima......no forum Active Delphi, obrigado pela atenção de todos.
GOSTEI 0