Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Sousa

[Resolvido] Trabalhando com Arquivo Texto

Recommended Posts

Olá pessoal,

 

Estou com um problemas para gerar um arquivo texto, pois o programa só funciona sem bugs caso o meu arquivo já esteja criado.

Caso seja a primeira vez que o programa esta sendo executado (o arquivo ainda não foi criado) ele dá um erro de I/O erro 32 no comando

Rewrite(Arquivo). A partir da segunda vez que ele é executado (o arquivo já existe) ele executa sem problemas.

Segue abaixo o código.

 

OBS: Realizei teste com as funções Rewrite, Append, Reset. Todas apresentaram erros.

procedure TfrmTeste.GravaArquivoLogTransacao();
const
  NomArquivo: String = 'Backup.txt';
  NomDiretorio: String = 'Backup Atualizado';
var
  Path: String; 
  Arquivo: TextFile; 

begin
  Path := ExtractFilePath(Application.ExeName); 
  Path := Path + 'Backup Atualizado\';  

  if not DirectoryExists(Path) then
	begin
	   CreateDir(NomDiretorio);
	end;
  if not FileExists(Path + NomArquivo) then
	begin
	   FileCreate(Path + NomArquivo);
	end;
  if FileExists(Path + NomArquivo) then
	begin
	  Try
		AssignFile(Arquivo, Path + NomArquivo);
		//Reset(Arquivo);   //Ocorreu ERRO
		//Append(Arquivo);	//Ocorreu ERRO
		Rewrite(Arquivo); //Ocorreu ERRO
		Writeln(Arquivo,'TESTE TESTE TESTE TESTE TESTE TESTE');
		Writeln(Arquivo,'TESTE0101 TESTE0101 TESTE0101 TESTE0101 TESTE0101 TESTE0101');
		CloseFile(Arquivo);
		Except //Tambem testei com o FINALLY
		   ShowMessage('Erro na manipulação de dados!');
		end;
   end;
end;
Agradeço a colaboração.

 

Felipe de Sousa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que seu problema está na mistura de códigos que fez ai na parte da criação de diretórios e arquivos... fiz este teste pondo apenas um botão num form e funciona perfeitamente.

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, FileCtrl,
  StdCtrls;

type
  TForm1 = class(TForm)
	Button1: TButton;
	procedure Button1Click(Sender: TObject);
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);
const
	NomArquivo: String = 'Backup.txt';
	NomDiretorio: String = 'c:\Temp\';
var
	Path: String;
	Arquivo: TextFile;

begin
	Path := NomDiretorio;

	if not DirectoryExists(Path) then
	try
	   CreateDir(Path);
	except
	   Showmessage('Não foi possível criar o diretório... abortando o processo.');
	   Exit;
	end;

	Try
	  {$I-}
		AssignFile(Arquivo, Path + NomArquivo);
		FileMode := 2;  {Arquivo com permição de leitura e gravação}
		Rewrite(Arquivo);
		Writeln(Arquivo,'TESTE TESTE TESTE TESTE TESTE TESTE');
		Writeln(Arquivo,'TESTE0101 TESTE0101 TESTE0101 TESTE0101 TESTE0101 TESTE0101');
		CloseFile(Arquivo);
	  {$I+}
	Except
	  ShowMessage('Erro na manipulação de dados!');
	end;
end;

end.

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qualquer coisa avisa aqui se conseguiu ou não ok?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo mesmo, o que estava faltando era os tratamentos de exceção na hora de criar,

{$I-} e {$I+}.

Esses comandos de máquina que estão entre chaves são novos pra mim,

qual a sua funcionalidade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o código que está usando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

procedure TForm1.Button1Click(Sender: TObject);
const
  NomArquivo: String = '\Backup.txt';
  CaminhoDiretorio: String = 'C:\Arquivos de programas\Borland\Delphi7\Projects';

var
  Path : String;
  Arquivo: TextFile;

begin
  Path := CaminhoDiretorio;
  Path := Path + '\Backup Atualizado';

  if not DirectoryExists(Path) then
	try
	  CreateDir(Path);
	except
	  Showmessage('Não foi possível criar o diretório');
	end;
  if not FileExists(Path + NomArquivo) then
	try
	  FileCreate(Path + NomArquivo);
	except
	  ShowMessage('Erro na criação do arquivo');
	end;
  if FileExists(Path + NomArquivo) then
	begin
	  Try
		{$I-}
		  AssignFile(Arquivo, Path + NomArquivo);
		  FileMode := 2;
		  Rewrite(Arquivo);
		  Writeln(Arquivo,'TESTE0101 TESTE0101 TESTE0101 TESTE0101 TESTE0101 TESTE0101');
		  CloseFile(Arquivo);
		{$I+}
	  Except
		ShowMessage('Erro na manipulação de dados!');
	  end;
	end;
end;

O único problema que esta ocorrendo é quando ele é executado pela primeira vez e o arquivo ainda não foi criado, ele não insere na primeira vez que é executado. É como se ele não aceitasse escrever nada nele no processo em que foi criado.

Mas fora isso está ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso deve estar ocorrendo porque você está tentando criar duas vezes o seu arquivo no mesmo trecho de código, uma vez com o FileCreate e outra logo em seguida com o Rewrite... veja o código que eu postei acima.... não precisa testar se o arquivo existe porque o Rewrite vai recriar o arquivo caso ele exista ou então vai criá-lo caso o arquivo não exista.

 

Copie o código que postei acima em um novo botão e execute... vai ver que funciona corretamente.

 

 

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.