Fórum Problema ao escrever em arquivo #404190

02/07/2011

0

Estou com problema ao escrever em um arquivo, estou tendo uma exception.....se alguém puder me ajudar, o código segue abaixo. 
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

Wagner_teixeira

Responder

Posts

02/07/2011

Wagner_teixeira


Estou com problema ao escrever em um arquivo, estou tendo uma exception.....se alguém puder me ajudar, o código segue abaixo. 
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.
 
Responder

Gostei + 0

02/07/2011

Marco Salles

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 :..


Responder

Gostei + 0

02/07/2011

Wagner_teixeira

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:
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


Responder

Gostei + 0

02/07/2011

Marco Salles

engraçado , vc esta fechando e logo apos o deletando ???

CloseFile(arquivo);
DeleteFile(diretoriocorrente+'\temp.bat');
Responder

Gostei + 0

02/07/2011

Wagner_teixeira

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;
Responder

Gostei + 0

02/07/2011

Marco Salles

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
Responder

Gostei + 0

03/07/2011

Wagner_teixeira

comentei a linha DeleteFile(diretoriocorrente+'\temp.bat'); pra ver o que escreveu.
e não esta gerando exception na execução.

Responder

Gostei + 0

03/07/2011

Wagner_teixeira

Problema resolvido no link que postei acima......no forum Active Delphi, obrigado pela atenção de todos.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar