Oppure

Loading
11/07/06 19:16
Morpheus80
Salve a tutti, ho bisogno di un aiutino:
io ho creato un programma per copiare file da una directory a un'altra, e funziona benissimo, però se provo a copiare un file (.exe) esso diventa poi ineseguibile: esattamente: "Error, Cannot open by Dos" o una cosa del genere (non la si riesce a leggere bene in quanto il programma termina da solo appena aperto).

se può servire vi posto anche in codice del programma di copia:

 program copia;
var
A, B: text;
S: string;
begin
assign(A,'file da copiare');
assign(B,'file destinazione');
reset(A);
rewrite(B);
Repeat
readln(A, S);
writeln('B, S');
Until eof(A);
close(A);
Close(B);
end.

questo codice era già stato presentato come esempio da: Il Totem, nel post "Copiare File".
vi ringrazio in anticipo per la eventuale risposta ;)
Ultima modifica effettuata da Morpheus80 11/07/06 19:25
aaa
11/07/06 20:43
pierotofy
Lo credo, apri i files in formato testuale.

Prova a cambiare così la dichiarazione dei due stream:

A, B: file;


Poi credo che dovrai cambiare le funzioni che usi per leggere e scrivere da uno stream all'altro, se non erro dovrai usare readblock e writeblock.
Ultima modifica effettuata da pierotofy 11/07/06 20:45
Il mio blog: piero.dev
11/07/06 21:13
Morpheus80
Postato originariamente da pierotofy:

Lo credo, apri i files in formato testuale.

Prova a cambiare così la dichiarazione dei due stream:

A, B: file;


Poi credo che dovrai cambiare le funzioni che usi per leggere e scrivere da uno stream all'altro, se non erro dovrai usare readblock e writeblock.

:( azz non me ne ero accorto.... (ecco cosa succede stare davanti al computer tutto il giorno senza fare pause... sinceramente questo programma lo compilato la sera prima di andare a dormire e non avevo la testa al mio posto.. proprio vero che la stanchezza è la nemica numero uno della concentrazione :D) grazie... ora provo ;)
aaa
11/07/06 21:47
Morpheus80
..niente, non riesco a farlo funzionare... non scrive il file, cioè, il comando WriteBlock e ReadBlock non li identifica...:-? Help!
aaa
23/10/09 12:30
maurino
come posso copiare il file in un'altra directory??
aaa
28/10/09 13:28
Questo procedure funziona su FreePascal
Nome1 è il nome del file da copiare, Nome2 della copia(può anche essere in un'altra cartella),spero di averlo scritto giustro

Procedure COPIA(Nome1, Nome2 : string);
var
F1, F2 : file of byte;
B : byte;
BEGIN
Assign(F1, Nome1);
Assign(F2, Nome2);
reset(F1);
rewrite(F2);
repeat
read(F1,B);
write(F2,B);
until eof(F1);
close(F1);
close(F2);
END;

15/12/09 17:02
gm.jimmy
la tua procedura però funziona solo con i file txt...mentre con gli exe o con le immagini come si fa?
aaa
15/12/09 20:10
riccardo_2193
Postato originariamente da gm.jimmy:

la tua procedura però funziona solo con i file txt...mentre con gli exe o con le immagini come si fa?


allora, ecco un esempio (tratto da freepascal.org, quindi non so se funzioni con il turbopascal. io l'ho testato su free pascal e funziona benissimo):
// Questo è un programma dimostrativo che mostra come lanciare
 // un programma esterno.
 program launchprogram;
 
 // Qui includiamo i files che hanno utilizzo funzionale
 // e le procedure che ci occorreranno.
 uses 
   Classes, SysUtils, Process;
 
 // Questa è la definizione della variabile "AProcess" 
 // come una variabile di tipo "TProcess"
 var 
   AProcess: TProcess;
 
 // Qui è dove il nostro programma inizia
 begin
   // Adesso creeremo l'oggetto TProcess e
   // lo assegneremo  alla variabile  var AProcess.
   AProcess := TProcess.Create(nil);
 
   // Diremo al nuovo  AProcess quale è il comando da eseguire.
   // Copia immagine.jpg nella cartella 'Cartella'
   AProcess.CommandLine := 'copy C:\immagine.jpg C:\Cartella\immagine.jpg';
 
   // Definiremo una opzione per quando il programma
   // è in esecuzione. Questa opzione ci assicurerà che il nostro programma
   // non continuerà sin quando il programma che lanceremo
   // non sarà terminato.                vvvvvvvvvvvvvv
   AProcess.Options := AProcess.Options + [poWaitOnExit];
 
   // Adesso che AProcess sa qual'è la linea di comando 
   // verrà lanciato.
   AProcess.Execute;
 
   // Questo non avverrà sino a quando copy C:\immagine.jpg C:\Cartella\immagine.jpg non fermerà la sua esecuzione.
   AProcess.Free;   
 end.


spero di essere stato utile... in questo modo puoi eseguire qualunque comando da dos (di per se il pascal non mi sembra dia la possibilità di copiare file). Ah e se non vado errato (uso mac quindi non so dirti con precisione) c'è una libreria in tp chiamata 'dos': anche quella dovrebbe permetterti di fare una cosa simile
Ultima modifica effettuata da riccardo_2193 16/12/09 6:04
aaa