Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
MVJunior

[Resolvido] Erro ao tentar escrever em arquivo.

Recommended Posts

Tá aparecendo o erro i/o error 32 einouterror no seguinte código abaixo, quando tento escrever num arquivo:


procedure insereArtista(nome:String;nome_musica:String);
var
existe:Boolean;
contalinha:Integer;
linha:String;
begin
//Criar o índice dos artistas
AssignFile(arqArtista,nome+'.txt');
{$i-}
reset(arqArtista);
{$i+}
if (IOResult<>0) then
begin
Rewrite(arqArtista);
for contaLinha:=0 to 19 do
begin
Writeln(arqArtista,'*');
end;

end;
CloseFile(arqArtista);
//Verificar os cantores existentes
AssignFile(arqIndice,'listaArtista.txt');
{$i-}
reset(arqIndice);
{$i+}
if (IOResult<>0) then
begin
Rewrite(arqIndice);
end;
existe:=false;
while( not eof(arqIndice) ) do
begin
readln(arqIndice,linha);
if( linha = nome ) then
begin
existe:=true;
end;
end;
if( existe = false ) then
begin
Append(arqIndice); // Nessa linha está aparecendo o erro.
writeln(arqIndice,nome);
end;
CloseFile(arqIndice);
end;

// Procedimento que chama o insereArtista
procedure TfrmPrincipal.btnTesteClick(Sender: TObject);
var
j:Integer;
linha,artista,musica:String;

begin
AssignFile(Arquivo,'teste.txt');
reset(Arquivo);
artista:='';
musica:= '';
while( not eof(Arquivo)) do
begin
readln(Arquivo,linha);
if(linha <> null ) then
begin
for j:=0 to Length(linha) do
begin
if( linha = '***cifra***' ) then
begin
readln(Arquivo,linha);
artista:= Copy(linha,0,pos('-',linha)-1);
musica:= Copy(linha,pos('-',linha)+2,length(linha));
insereArtista(artista,musica);
end;
end;
end;
end;
// CloseFile(Arquivo);
for j:=0 to cmbCantor.ItemHeight do
begin
cmbCantor.ItemIndex:=j;
if( cmbCantor.Text = artista ) then
begin
break;
end
else
begin
cmbCantor.Items.Add(artista);
break;
end;
end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá MVJunior,

Eu vi o seu código e vou lhe dar uma dica, não use o close depois que você gravar, deixe para usar no final do programa na ultima liha do código. Muita gente se enrrola nessa parte. Existe o comando de abrir o arquivo que é o reset porque?(Os programas não trabalham direto no arquivo eles carregam as informações do arquivo e armazena no manipulador do arquivo na memoria (arqArtista)) se você usar o close, logo você precisarar para ler ou para gravar outras informações, mas o manipulador do arquivo foi fechado por você antes da hora daí ocorre o erro. Mais uma dica, o reset e o close devem ser usados apenas uma vez, o reset no começo do codigo e o close no final do codigo, entre eles você pode usar a vontade o read ou readln(para textos) write ou writeln, seek, filesize em fim todos os comandos para manipulação de arquivos.

Espero ter te ajudado e que isso resolva o problema, caso contrário é só perguntar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Olá MVJunior,

    Eu vi o seu código e vou lhe dar uma dica, não use o close depois que você gravar, deixe para usar no final do programa na ultima liha do código. Muita gente se enrrola nessa parte. Existe o comando de abrir o arquivo que é o reset porque?(Os programas não trabalham direto no arquivo eles carregam as informações do arquivo e armazena no manipulador do arquivo na memoria (arqArtista)) se você usar o close, logo você precisarar para ler ou para gravar outras informações, mas o manipulador do arquivo foi fechado por você antes da hora daí ocorre o erro. Mais uma dica, o reset e o close devem ser usados apenas uma vez, o reset no começo do codigo e o close no final do codigo, entre eles você pode usar a vontade o read ou readln(para textos) write ou writeln, seek, filesize em fim todos os comandos para manipulação de arquivos.

    Espero ter te ajudado e que isso resolva o problema, caso contrário é só perguntar.

    Beleza,obrigado pela dica!!! Tópico resolvido :cool:

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.
    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×