' Rapid-Q by William Yu (c)1999-2000 . ' ================================================================================ ' Upload_il_tuo_script_su_Rapidq.it ' Operazioni_sui_file La necessità di creare una copia di un file può verificarsi sempre dalla creazione di una utility che semplicemente crea file esistenti con differenti nomi ad una applicazione che copia i file originali in una area di lavoro temporanea. Sebbene la duplicazione di un file possa essere effettuata mediante codice che legge ciascun byte da uno stream di un file esistente e poi lo scriva byte per byte in uno stream di un nuovo file, abbiamo a disposizione un modo alternativo più semplice. I componenti dello stream dei file contengono un metodo chiamato COPYFROM che permette la copia del contentuto di uno stream di file in un altro stream, siano essi entrambi stream su disco, in memoria o uno su disco e l'altro in memoria. Copia da File-a-FileLa forma più comune di duplicazione di un file è forse una copia diretta dell'intero contenuto di un file in un secondo file di nome differente. L'esempio seguente esegue la copia di un file per creare un backup del file esistente. Il codice sorgente di esempio presume che il file con nome "File1.txt" già sia presente nella directory corrente sul disco. Un nuovo file ( "File1.bak" ) viene creato per mantenere una copia delle informazioni del file "File1.txt" . Se il "File1.bak" già esiste su disco, sarà sovrascritto. CONST fmOpenRead = 0 CONST fmOpenWrite = 1 DIM OrigFile AS QFILESTREAM DIM DuplFile AS QFILESTREAM OrigFile.Open("File1.txt", fmOpenRead) DuplFile.Open("File1.bak", fmOpenCreate) DuplFile.CopyFrom(OrigFile, OrigFile.Size) OrigFile.Close DuplFile.Close Il codice sorgente suesposto crea due componenti pronti all'uso di QFILESTREAM chiamati rispettivamente OrigFile ( il file originale ) e DuplFile ( il file duplicato). OrigFile è collegato al file su disco con nome "File1.txt" ed apre il file in modalità solo lettura. DuplFile è collegato al file su disco chiamato "File1.bak" ed apre il file in modalità crea_file. Tutto il resto del lavoro viene fatto dalla linea di codice CopyFrom . Questa singola linea di codice sorgente chiama il metodo COPYFROM da dentro il componente DuplFile ed copia il contenuto del componente OrigFile eguale al numero di byte specificati da OrigFile.size. Il risultato finale è che tutte le informazioni da OrigFile ( "File1.txt" ) sono copiate in DuplFile ( "File1.bak" ). Infine il metodo CLOSE viene chiamato per ciascun componente file stream al fine di terminare il collegamento con i file del disco. Notare : gli streams del codice sorgente suesposto possono essere usati, quali componenti QMEMORYSTREAM, per copiare file esistenti solo sulla memoria virtuale del computer. File temporaneo in memoriaDi solito, la manipolazione diretta di un file su disco non è desiderata. La migliore scelta per le applicazioni che effettuano operazioni di editazione su file sarebbe di manipolare le informazioni in una copia temporanea del file originale. In questo modo, l'utente ha la capacità di annullare i cambiamenti e tenersi l'originale, il file non editato, o salvare i cambiamenti e avere un file temporaneo, editato, al posto di quello originale. Il seguente esempio effettua una copia di un file per creare un file temporaneo in memoria . L'esempio di codice presume che il file chiamato "File1.txt" esista già nelle corrente directory sul disco. CONST fmOpenRead = 0 CONST fmCreate = 65535 DIM OrigFile AS QFILESTREAM DIM WorkFile AS QMEMORYSTREAM DIM SavingChanges AS INTEGER OrigFile.Open("File1.txt", fmOpenRead) WorkFile.CopyFrom(OrigFile, OrigFile.Size) OrigFile.Close ' inset code here for file edits, etc. ' and the option to save changes IF SavingChanges THEN OrigFile.Open("File1.txt", fmCreate) OrigFile.CopyFrom(WorkFile, WorkFile.Size) OrigFile.Close END IF WorkFile.Close Il codice suesposto impiega solo il metodo OPEN per il componente QFILESTREAM. Poichè QMEMORYSTREAM risiede solamente nella memoria del computer, l'azione di definire un componente con DIM crea tutti i collegamenti necessari per lo stream del file in memoria. Il metodo COPYFROM viene chiamato dal file di lavoro per caricare l'intero file da disco nello stream della memoria. Il componente OrigFile viene poi chiuso, perchè tutto il lavoro viene fatto sul file stream in memoria. Dopo alcune operazioni di editazione, aggiunte o cancellazioni sono effettuate, l'utente dovrebbe avere la possibilità di salvare questi cambiamenti. Il modo più facile di fare questo è riaprire con OPEN il file su disco in modalità crea_file ( per sovrascrivere le informazioni originali) ed effettuare una operazione inversa al metodo COPYFROM mettendo l'intero contenuto presente in memoria sul disco. ' =============================================================================== ' 2003 Holyguard.net - 2007_Abruzzoweb