22/02/2006

Erro Ao tentar ler o Arquivo

Bom dia pessoal, to tendo o seguinte probleminha uma função para ler um arquivo e depois se quero editar o mesmo arquivo ele da dando o erro: I/O ERROR 32:
A função que uso pra ler o arquivo e não ta com erro é:

AssignFile(ArqServidor, ´C:\ARQUIVO.TXT´);
Reset(ArqServidor);
Read(ArqServidor, LocalServidor);
CloseFile(ArqServidor);

e depois tento usar a seguinte para editar o arquivo e da o erro é:
Try
AssignFile (ArquivoServidor, ´C:\Arquivo.TXT´);
ReWrite(ArqTexto);
WriteLn(ArqTexto, LbLocal.Text);
except
On EconvertError do
Messagedlg(´ERRO: Arquivo Invalido´, mterror, [mbok],0);
end;

Alguem pode me ajudar a resolver este problema


Marcal

Respostas

22/02/2006

Paullsoftware

AssignFile(ArqServidor, ´C:\ARQUIVO.TXT´); Reset(ArqServidor); Read(ArqServidor, LocalServidor); CloseFile(ArqServidor);

coloque esse código dentro do Try Finally..

try
AssignFile(ArqServidor, ´C:\ARQUIVO.TXT´);
Reset(ArqServidor);
Read(ArqServidor, LocalServidor);
finally
CloseFile(ArqServidor);
end;


Responder Citar

22/02/2006

Massuda

I/O ERROR 32
Esse erro indica que o arquivo está aberto/em uso.

No caso, quando você vai escrever no arquivo, o Rewrite pede acesso exclusivo ao arquivo, mas não está conseguindo porque alguém está usando o arquivo (para leitura ou escrita). Pode ser alguma outra parte do seu programa ou algum outro programa que está mantendo o arquivo aberto.


Responder Citar

22/02/2006

Marcal

Realmente amigo Massuda, e isso mesmo mais a unica rotina que tenho em meu sistema pra abrir este arquivo e este eu tentei fazer como nosso amigo falou colocar o codigo dentro do try finally mais continua dando o mesmo erro tem alguma função que força o fechamento deste arquivo.


Responder Citar

22/02/2006

Massuda

...função que força o fechamento deste arquivo.
Quem faz isso é o CloseFile.... no caso do código que escreve no arquivo, você está chamando CloseFile depois de completar a escrita? No código que você postou não tem o CloseFile.


Responder Citar

22/02/2006

Marcal

Sim Amigo inclusive fiz um teste com outro nome de arquivo e da certo mais quanto tento acessar o arquivo q ja fechei closefile() continua o erro
1º {Codigo de Leitura}

Try
AssignFile(ArqServidor, ´C:\SERVIDOR.TXT´);
Reset(ArqServidor);
Read(ArqServidor, LocalServidor);
Finally
CloseFile(ArqServidor);
end;

e depois 2º
{Codigo de Escrita }
Try
Try
AssignFile(ArquivoServidor, ´C:\SERVIDOR.TXT´);
ReWrite(ArquivoServidor);
WriteLn(ArquivoServidor, LbLocal.Text);
Finally
Closefile(ArquivoServidor);
end;
except
On EconvertError do
Messagedlg(´ERRO: Arquivo Invalido´, mterror, [mbok],0);
end;


Responder Citar

22/02/2006

Massuda

Como você testou com outro nome de arquivo e dá certo, é sinal que esse arquivo está em uso por outra parte do seu programa ou por outro programa.

Os pedaços de código que você postou não tem problema.


Responder Citar

22/02/2006

Martins

Testei o código abaixo e funcionou, não deu erro algum, não sei se serve para vc, mas dê uma olhada.


procedure TForm1.Button1Click(Sender: TObject);
var
 Arq: TextFile;
 LocalServidor: String;
begin
 try
   AssignFile(Arq, ´C:\Rename\Teste.txt´);
   Reset(Arq);
   ReadLn(Arq, LocalServidor);
   Edit2.Text := LocalServidor;
 finally
   CloseFile(Arq);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  arq: TextFile;
begin
  try
    try
      AssignFile(Arq, ´C:\Rename\Teste.txt´);
      ReWrite(Arq);
      WriteLn(Arq, Edit1.Text);
    finally
      CloseFile(Arq);
    end;
  except
    on EConvertError do
    MessageDlg(´ERRO: Arquivo inválido´, mtError, [mbOK&93;, 0 );
  end;
end;


Boa sorte!!!


Responder Citar

22/02/2006

Martins

Como você testou com outro nome de arquivo e dá certo, é sinal que esse arquivo está em uso por outra parte do seu programa ou por outro programa. Os pedaços de código que você postou não tem problema.


Verdade [b:92e8eb741c]Massuda[/b:92e8eb741c], pode ser isso, talvez um outo aplicativo possa está usando o arquivo, para simular o erro eu criei o arquivo normal, utilizando o [b:92e8eb741c]CloseFile[/b:92e8eb741c] para fechá-lo e depois em outro botão eu faço a leitura do conteúdo do arquivo sem fechá-lo e quando tento alterar seu conteúdo, é mostrado o Erro 32 q indica q o arquivo está em uso. Talvez em algum lugar do seu sistema vc faça essa leitura, verifique seu código.

Boa sorte!!!


Responder Citar

22/02/2006

Marcal

Amigo Martins ainda não teste seu codigo mais vou testar. Quanto outra parte do sistema esta utilizando o arquivo e impossivél pq esta e a primeira função q estou criando no meu projeto para ler e editar esse arquivo. a leitura eu coloquei no evento OnActive do meu formulário Principal e quando eu quero alterar o conteudo do meu arquivo eu entro em um outro forumulário no menu Utilitário do meu formulario principal, Será que não e alguma rotina interna do Windows XP que continua com o arquivo aberto internamente.


Responder Citar

22/02/2006

Massuda

Usando o Windows Explorer você consegue mover/excluir esse arquivo? Se não conseguir, é sinal que o arquivo está em uso por algum programa em execução.


Responder Citar

22/02/2006

Martins

Usando o Windows Explorer você consegue mover/excluir esse arquivo? Se não conseguir, é sinal que o arquivo está em uso por algum programa em execução.


Isso mesmo, bem lembrado [b:413692757d]Massuda[/b:413692757d], faça o teste sugerido pelo Massuda ou então mude o nome desse arquivo chato :P

Faça os testes e post aqui novamente!!


Responder Citar

22/02/2006

Marcal

Sim Amigos antes deu colocar o try finally na leitura ele não aceitava mais agora ele aceita mover alterar e pagar mais continuo usando a função

Try
AssignFile(ArquivoServidor, ´C:\SERVIDOR.TXT´);
ReWrite(ArquivoServidor);
WriteLn(ArquivoServidor, LbLocal.Text);
Finally
Closefile(ArquivoServidor);
end;

para alterar o arquivo e so q agora da erro I/O error 103, o mudou o erro mais continua não funcionando


Responder Citar

22/02/2006

Massuda

erro I/O error 103
Esse erro significa que o arquivo não foi aberto. No caso do seu código, isso significa que o Rewrite falhou. Experimente codificar assim...
AssignFile(ArquivoServidor, ´C:\SERVIDOR.TXT´); 
{$I-} ReWrite(ArquivoServidor); {$I+} 
if IOResult = 0 then begin
  {$I-} WriteLn(ArquivoServidor, LbLocal.Text);  {$I+} 
  {$I-} Closefile(ArquivoServidor);  {$I+} 
end;
...o {$I-} e {$I+} são coisas antigas, mas funcionam neste caso. O $I neste caso habilita/desabilita o runtime error, mas com isso desabilitado a única forma de você saber se deu erro é checar se o valor de IOResult é diferente de zero (zero indica nenhum erro).


Responder Citar

22/02/2006

Marcal

E realmente amigos eu usei esta forma
AssignFile(ArquivoServidor, ´C:\SERVIDOR.TXT´);
{$I-} ReWrite(ArquivoServidor); {$I+}
if IOResult = 0 then
begin
{$I-} WriteLn(ArquivoServidor, LbLocal.Text); {$I+}
{$I-} Closefile(ArquivoServidor); {$I+}
end
So que o valor de IOResult = Inaccessible value
E não acontence nada nenhuma msg de erro como nosso amigo Massuda falou o que devo fazer agora parece uma coisa tão simples mais ta me dando a maior dor de cabeça tentei colocar <> ao inves de = mais nada


Responder Citar

22/02/2006

Martins

Sim Amigos antes deu colocar o try finally na leitura ele não aceitava mais agora ele aceita mover alterar e pagar mais continuo usando a função Try AssignFile(ArquivoServidor, ´C:\SERVIDOR.TXT´); ReWrite(ArquivoServidor); WriteLn(ArquivoServidor, LbLocal.Text); Finally Closefile(ArquivoServidor); end; para alterar o arquivo e so q agora da erro I/O error 103, o mudou o erro mais continua não funcionando


Por favor, verifique os atributos do arquivo, veja se ele não está somente leitura, pq esse erro é o q o Massuda falou mesmo, o arquivo não está sendo aberto.

Boa sorte!!!


Responder Citar