Erro Ao tentar ler o Arquivo

Delphi

22/02/2006

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

Marcal

Curtidas 0

Respostas

Paullsoftware

Paullsoftware

22/02/2006

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;


GOSTEI 0
Massuda

Massuda

22/02/2006

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.


GOSTEI 0
Marcal

Marcal

22/02/2006

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.


GOSTEI 0
Massuda

Massuda

22/02/2006

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


GOSTEI 0
Marcal

Marcal

22/02/2006

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;


GOSTEI 0
Massuda

Massuda

22/02/2006

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.


GOSTEI 0
Martins

Martins

22/02/2006

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], 0 );
  end;
end;


Boa sorte!!!


GOSTEI 0
Martins

Martins

22/02/2006

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


GOSTEI 0
Marcal

Marcal

22/02/2006

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.


GOSTEI 0
Massuda

Massuda

22/02/2006

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.


GOSTEI 0
Martins

Martins

22/02/2006

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


GOSTEI 0
Marcal

Marcal

22/02/2006

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


GOSTEI 0
Massuda

Massuda

22/02/2006

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


GOSTEI 0
Marcal

Marcal

22/02/2006

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


GOSTEI 0
Martins

Martins

22/02/2006

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


GOSTEI 0
Joaoshi

Joaoshi

22/02/2006

Colega se você ainda não sevolveu tente isto antes do CloseFile(ArquivoServidor).

FlushFileBuffers(TTextRec(ArquivoServidor).Handle);

Espero ter ajudado.


GOSTEI 0
Kitsystem

Kitsystem

22/02/2006

Vc esta tentando debugar o IoResult e ira dar isto mesmo

Coloque ele em uma variavel

var iErro: Integer

iErro:=Ioresult
Case iErro of
//aqui vc pega no Help todos os erros, os codigos de erro vc acha até no Turbo pascal


GOSTEI 0
Marcal

Marcal

22/02/2006

Amigo KitSystem sim fiz este teste ele ta dando o erro 32 realmente e problema de arquivo ja em uso eu fiz o que nosso amigo João disse mais não resolveu, mais fis uma mudança e achei interessante mais continua o mesmo problema ao inves do arquivo chamar servidor.TXT eu mudei pra .PET uma istenção q eu inventei ai acontence o seguinte quando tento alterar o arquivo ele criar um outro arquivo so com o nome SERVIDOR´.pet e pronto e continua dando o erro de I/O mais agora não entendo pq cria este arquivo.


GOSTEI 0
Marcal

Marcal

22/02/2006

Amigos alguem tem então alguma outra solução similar mesmo q seja mais complicada mais q resolva por exemplo tentei excluir o arquivo deposi de lido e depois cria-lo e editar mais não deu certo então alguem tem uma solução ja testei esse procedimento de ler e depois editar em outro pc mais acontece o mesmo erro


GOSTEI 0
Michael

Michael

22/02/2006

Refiz seu exemplo, assim como o colega [b:ae7a269f73]Martins[/b:ae7a269f73] fez, aqui e tbm não obtive nenhum erro.

procedure TForm1.Button1Click(Sender: TObject);
var
  Arquivo: TextFile;
  S: string;
begin
  AssignFile(Arquivo, ´C:\Arquivo.txt´);
  try
    Reset(Arquivo);
    ReadLn(Arquivo, S);
    ShowMessage(S);
  finally
    CloseFile(Arquivo);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Arquivo: TextFile;
  S: string;
begin
  S := ´Michael Benford´;
  AssignFile(Arquivo, ´C:\Arquivo.txt´);
  try
    Reset(Arquivo);
    WriteLn(Arquivo, S);
  finally
    CloseFile(Arquivo);
  end;
end;


Há mais alguma coisa que vc esteja fazendo além disso?

[]´s


GOSTEI 0
Kitsystem

Kitsystem

22/02/2006

Acho que vc esta com alguma condição nesta pasta no Windows, algo como somente leitura, pois aqui tb não da nenhum erro.
Tente outra maquina


GOSTEI 0
Marcal

Marcal

22/02/2006

Bem galera e relamente ja rescrevi este codigo por variais veses mais não adiate e ja testei em 2 computadores e tbm nada então vou tentar fazer de outra forma. Valeu galera pela força. Tenho q ja resolver outro problema q apareceu q parece ser pior ate vou criar um nava pergunta no forum


GOSTEI 0
Martins

Martins

22/02/2006

Bem galera e relamente ja rescrevi este codigo por variais veses mais não adiate e ja testei em 2 computadores e tbm nada então vou tentar fazer de outra forma. Valeu galera pela força. Tenho q ja resolver outro problema q apareceu q parece ser pior ate vou criar um nava pergunta no forum


Colega, vc consegue modificar esse arquivo manualmente, digo pelo Windows Explorer, abrindo o Bloco de Notas?

Como estão as suas diretivas de seguraça do XP?

Pq o código não tem problema, o problema pode está com as permissões do USER.

Boa sorte!!


GOSTEI 0
Marcal

Marcal

22/02/2006

O Pior que pelo Windows Explore, Bloco de Notas consig alterar ate esxcluir mais via aquele codigo nada ja olhei as permissões do Xp mais ta tudo liberado inclusive o arquivo nao ta como somente leitura ele aceita tudo menos via codigo. Antes de mim usar o try finally ai sim ele não aceitava eu esxcluir e nem editar depois que eu ja tinha aberto o arquivo como leitura
ai eu usei ai conseguia mais so via windows bloco de notas explorer


GOSTEI 0
Iprojetos Web

Iprojetos Web

22/02/2006

rfgd sdfg dfg dsfg dfg df gdfg[code][code]dsfg dsfg
[/code][/code]
GOSTEI 0
POSTAR