PDA

Visualizza la versione completa : [DELPHI] Cancellare file di record ed errore I/O 32


blasjo
28-03-2009, 11:19
Ciao ragazzi,sto facendo una cancellazione in un file di record .dat e quindi mi sono munito di un file di appoggio dove ho copiato tutti i record da NON cancellare,dopodichè la mia intenzione era quella di cancellare il file originale e rinonimare il file di appoggio con il nome del file originale,ovviamente il tutto da codice.
pratiacamente io copio tutto nel file di appoggio(tranne appunto il record da canc) e al momento della fine della lettura del file originale (fuori dal while not(eof(f)) metto il closefile(f); e fin qui tutto va bene e poi erase(f); però qui il programma si pianta dandomi I/O Error 32....
è un po' che ci smanetto ma non ci salto fuori,come faccio???help

blasjo
28-03-2009, 13:27
ho provato a usare il deletefile('percorso file') ma non lo cancella senza dare nessun errore..provando invece a usare deletefile('percorso file a caso vuoto') (messo nello stesso punto della procedura) mi cancella il file...com'è possibile??

123delphi321
28-03-2009, 13:48
ciao,

prova a postare un po di codice

blasjo
28-03-2009, 14:11
ecco...il bello è che ho provato a mettere il deletefile dello stesso file nella prima unit(ho usato 5 form) e da li me lo cancella...ho provato a metterlo all'inizio di questa procedura per vedere se era un problema di controlli e continua a non cancellarlo...comunque ecco la procedura:


assignfile(f,'percorso file da cancellare');
reset(f);
assignfile(g,'percorso file di appoggio');
{$I-}
reset(g);
{$I+}
if ioresult<>0 then rewrite(g);
s1:=txtCanc.Text; {salva in s1 il nome del record da canc);
while not(eof(f)) do begin
x:='';y:='';
read(f,rec);
for i := 1 to length(s1) do begin
x:=x+upcase(s1[i]);
end;
for i := 1 to length(rec.nome) do begin
y:=y+upcase(rec.nome[i]);
end;
if x=y then begin
flag:=true;
{scrittura nella tabella,funziona}
if MessageDlg('Sicuro?',mtConfirmation,[mbYes, mbNo],0)=mrYes then begin
{copio in un file di "ripristino" le informazioni che vanno cancellate,funziona}
assignfile(r,'percorso file ripristino');
{$I-}
reset(r);
{$I+}
if ioresult<>0 then rewrite(r);
seek(r,filesize(r));
write(r,rit);
end;
end else begin
{copio tutte le info,tranne quella da cancellare nel file di appoggio,funziona}
seek(g,filesize(g));
write(g,farmacia);
end;
end;
closefile(f);
deletefile('percorso file originale');{non me lo cancella}
rename(g,'nome file originale');
end;

123delphi321
28-03-2009, 14:22
come da te descritto sembrerebbe un problema di lock

non e' che in una di queste 5 form che usi c'e' un riferimento al tuo file tale che lo locka?

blasjo
28-03-2009, 14:35
ho provato a cambiare il nome del file da cancellare in questa procedura e ho visto che così me lo cancella ma mi crea sempre un file con lo stesso nome nella stessa cartella vuoto..eppure in questa unit non c'è nessun rewrite(f); che me lo ricrea...mi spiego meglio:
nell'assignfile del file da cancellare l'ho chiamato "filedati2.dat" (l'originale è filedati.dat),faccio partire tutto e quando cancello e confermo,vado nella cartella file e mi trovo un "filedati.dat" da 0Kb vuoto...qual'è il problema??Non posso fregarmene perchè devo rinonimare il file di appoggio con il nome "filedati.dat" :biifu:

123delphi321
28-03-2009, 15:03
a questo punto, io verificherei con il debug cosa succede quando tenti di cancellare il file...

proverei a capire l'eccezzione che si solleva

usa try...except...end

blasjo
28-03-2009, 15:09
trovato erano dei closefile messi male nelle altre unit...finalmente finito :D grazie mille ;)

blasjo
28-03-2009, 15:55
un'altra domanda...come faccio se io ho impostato il numero di righe di una stringgrid a 10 e visualizzo un record per riga se ho tipo 20 record,come posso aggiungere delle altre righe nella tabella da codice e far comparire la scroll bar a fianco per scorrere l'elenco??grazie

123delphi321
28-03-2009, 16:48
in che componente visualizzi i record?

prova ad utilizzare il componente tlistbox e setta la visualizzazione della scrollbar...

Loading