Newsgroup: it.comp.lang.delphi
Titolo: Ancora con gli I/O error...

Sono di nuovo alle prese con l'errore I/O error 32 e non capisco
perchè esca ancora.... Posto il frammento di codice:
...
var
filebuf:Text;
FromF,FromF2,ToFu,ToFp: file;
Buf: array[1..900000] of Char;
AssignFile(FromF, 'percorso_file_partenza_1');
Reset(FromF, 1);
AssignFile(ToFu, 'percorso_file_ricevente_1');
Rewrite(ToFu, 1);
AssignFile(FromF2, 'percorso_file_partenza_2');
Reset(FromF2, 1);
AssignFile(ToFp, 'percorso_file_ricevente_2');
Rewrite(ToFp, 1);
AssignFile(ToF, 'percorso_file_ricevente_finale');
Rewrite(ToF);
CloseFile(ToF);
Append (ToF);
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToFu, Buf, NumRead, NumWritten);
BlockRead(FromF2, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToFp, Buf, NumRead, NumWritten);
AssignFile(filebuf,'percorso_file_ricevente_1');
Reset(filebuf);                                              // <<< I/O
error 32
...
Non riesco a capire perchè... a me sembra tutto giusto....
Grazie mille

 Reset(filebuf);                                              // <<< I/O
filebuf NON E' UN FILE: lo hai dichiarato come array....
A

Alberto Salvati ha scritto:

Buf è un array, filebuf è dichiarato come TEXT

> Buf è un array, filebuf è dichiarato come TEXT
sorry. avevo letto male.. :-((
TEXT?? forse TEXTFILE....
A.

Alberto Salvati ha scritto:

Ho provato, ma non cambia... mi sa che il problema è che la Reset
vuole come parametro un tipo  File e non Text, ma esiste allora una
funzione che non sia Reset per aprire in lettura un file di tipo Text e
non di tipo File? :(

Se esegui la chiamata:
AssignFile(ToFu, 'percorso_file_ricevente_1');
Rewrite(ToFu, 1);
e, in seguito:
AssignFile(filebuf,'percorso_file_ricevente_1');
Reset(filebuf);
senza prima aver chiuso il file ToFu è normale avere quest'errore.
L'errore 32 significa che due processi hanno contemporaneamente 
l'accesso in scrittura su di un medesimo file (cosa vietata)
Ciao

Microges ha scritto:

Ho inserito una Closefile(ToFu) dopo la Rewrite, ma così mi da errore
103 alla linea di Blockwrite(ToFu, Buf, NumRead, NumWritten)... allora
ho inserito Reset(toFu) prima della Blockwrite e mi da I/O error 1784
alla Blockwrite... :(
Non ci sto quasi capendo + niente... Help!!!

 ha scritto nel messaggio
Ho inserito una Closefile(ToFu) dopo la Rewrite, ma cosě mi da errore
103 alla linea di Blockwrite(ToFu, Buf, NumRead, NumWritten)...
e ha ragione, trova il file chiuso
allora
ho inserito Reset(toFu) prima della Blockwrite e mi da I/O error 1784
alla Blockwrite...
Reset(ToFu) o Reset(ToFu, 1)?
V.

 V.
Ho sbagliato a scrivere sul post... nel prog ho messo Reset(ToFu),
però ho visto che mettendoReset(ToFu, 1) quell'errore sparisce, ma
ritorna l'I/O error 32 su Reset(filebuf);

Il mio problema fondamentale è mettere il contenuto del mio file
(ToFu) in una stringa per poi analizzarne il contenuto... come posso
fare?

 fare?
 
  Usare Un TMemo.. o una Stringlist ?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
Ho sbagliato a scrivere sul post... nel prog ho messo Reset(ToFu),
però ho visto che mettendoReset(ToFu, 1) quell'errore sparisce, ma
ritorna l'I/O error 32 su Reset(filebuf);
FileBuf che hai dichiarato come Text e non TextFile...prova anche questa...
Poi un suggerimento (persomale, s'intende):
quando entri in un vicolo e non riesci più ad uscirne riprendi da capo...
se il codice che "rogna" è parte di un codice più grande metti da parte 
tutto e crea una mini applicazione che svolga le operazioni che ti danno 
problemi
mentre riscrivi la minidemo cambia anche tutti i nomi delle variabili (devi 
sentire che è un codice *nuovo*)
se devi aprire + file in letture e scrittura contemporaneamente comincia con 
il gestirne uno solo, quando lavora al meglio aggiungi la gestione 
dell'altro...e poi dell'altro ancora...
ti sarà + facile agganciare l'errore
Ciao
Valter

 Grazie mille
 
  Prego GDevil.


 FileBuf che hai dichiarato come Text e non TextFile...prova anche questa...
  Sicuramente il file dichiarato TEXT anzichè TEXTFILE da' errore. 


 fare?
tanto x iniziare, studiando un pochino e prestando attenzione al codice
che scrivi, Roby.
Gli informatici non sono apprendisti stregoni che gettano ossicini in
aria, ma professionisti pragmatici che studiano, si documentano,
provano e verificano che le cose funzionino.
A

 TEXT?? forse TEXTFILE....
è uguale
-- 
Mauro Falzari
"Creative minds have always been known
to survive any kind of bad training".
  (Anna Freud)



invece di usare i file, usa derivati di TStream, che si possono riversare 
uno sull'altro col metodo CopyFrom:
program Project1;
uses
  Windows, Classes, SysUtils, Dialogs;
var
  fs: TFileStream;
  ss: TStringStream;
  WinDirB: array[0..Pred(MAX_PATH)] of Char;
  WinDir: string;
begin
  Windows.GetWindowsDirectory(WinDirB, SizeOf(WinDirB));
  WinDir := WinDirB;
  WinDir := WinDir + PathDelim + 'WIN.INI';
  fs := TFileStream.Create(WinDir, fmOpenRead);
  try
    ss := TStringStream.Create('');
    try
      ss.CopyFrom(fs, 0);
      ShowMessageFmt('%d caratteri letti dal file "%s"', [ss.Size, 
WinDir]);
    finally
      ss.Free
    end
  finally
    fs.Free;
  end
end.
