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
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
Curtidas 0
Respostas
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
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
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
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
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;
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
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.
Os pedaços de código que você postou não tem problema.
GOSTEI 0
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.
Boa sorte!!!
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
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
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
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
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
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
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
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;
GOSTEI 0
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
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
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
22/02/2006
Colega se você ainda não sevolveu tente isto antes do CloseFile(ArquivoServidor).
FlushFileBuffers(TTextRec(ArquivoServidor).Handle);
Espero ter ajudado.
FlushFileBuffers(TTextRec(ArquivoServidor).Handle);
Espero ter ajudado.
GOSTEI 0
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
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
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
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
22/02/2006
Refiz seu exemplo, assim como o colega [b:ae7a269f73]Martins[/b:ae7a269f73] fez, aqui e tbm não obtive nenhum erro.
Há mais alguma coisa que vc esteja fazendo além disso?
[]´s
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
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
Tente outra maquina
GOSTEI 0
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
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
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
ai eu usei ai conseguia mais so via windows bloco de notas explorer
GOSTEI 0
Iprojetos Web
22/02/2006
rfgd sdfg dfg dsfg dfg df gdfg[code][code]dsfg dsfg
GOSTEI 0