Newsgroup: it.comp.lang.visual-basic
Titolo: Modo + veloce per unire file binari...?

Ciao raga, devo aggiungere a un mio programma una funzione che al
verificarsi di una certa condizione unisca alcuni file binari (5 o 6)
di 1giga ciascuno in un unico file binario (si tratta di file video
mpeg2).
Considerando la dimensione ho scelto di utilizzare il buon vecchio dos
usando il comando copy /B file1+file2+file3.... /B filedest...
di funzionare funziona, il problema e' che per unire tutti i pezzi in
un unico file ci mette tantissimo tempo!!
Un altra contro indicazione di questo metodo e' che per unire per
esempio 6 pezzi da 1giga devo avere come spazio libero almeno 6giga.
Cmq questo e' un problema secondario, la cosa che mi serve
maggiormente e' la velocita'.
Esiste un sistema + veloce per unire dei grossi file binari in un
unico file?
Bye!

 ha scritto nel messaggio
news:4117add...@news.tiscali.it...


 unico file?
oddio, qui devo ravanare nelle conoscenze scolastiche, spero che qualcuno
riesca a tradurlo ^_^;
un file e' allocato su disco in "pezzetti"
ogni pezzetto e' diviso in due parti diciamo, (1) NextPart (2) Data
ora il nextpart e' l'indirizzo fisico di dove si trova il prossimo pezzo,
ora basta "semplicemente" prendere l'ultimo pezzo del primo file e scriverci
in qualche modo l'indirizzo del primo pezzo del secondo file...
Semplice no ? ^_^
(ghgh, chissa' se ritrovo i testi scolastici e riesco a tirarne fuori
qualcosa....)
Intanto se cerchi doc sull'allocazione dei file nel filesystem che usi forse
qualcosa ne esce !
-- 
[Gigio2k]
www.g2kweb.it

 ma maggiore è più veloce e' il risultato.
Mmmm, si puoi anche allocare una matrice di byte di 1 MB, ma il 
progresso non è certo lineare. Qui il problema è spremere il 
massimo possibile dall'hardware accedendovi al livello minimo 
possibile e con funzioni di più basso livello possibile.
Ciao
CCCP++Mario


 riesca a tradurlo ^_^;
L'idea sarebbe ottima, questo è vero, anche se ammetterai che 
rimappare la tabella di allocazione (per far sembrare che i 
cluster allocati al file due in realtà appartengano alla fine 
del file uno, e così via) è un'operazione estremamente rischiosa 
e richiede una conoscenza precisissima di com'è strutturata la 
FAT appunto (e quindi della versione di Windows etc etc).
Ora non so Win2000 o XP, ma già dal '98 le chiamate al bios 
venivano filtrate (emulate) ed intercettate. In sostanza non era 
consentito l'accesso a livello di int 13 (nè le AbsRead e 
AbsWrite di settori fisici del DOS via bios).
Forse la funzione DeviceIOControl consente l'accesso ad un 
livello così basso, non ho controllato, ma anche se le 
performance sono mostruosamente rapide (non viene fisicamente 
spostato nessun cluster ma solo rimappati) non mi sentireei di 
consigliarlo a nessuno. Dai, troppi rischi che qualcosa vada 
storto, e se hai un antivirus probabilmente ti ammazzerebbe di 
botte al solo tentativo.
Con il vecchio DOS ho usato ABSRead sul disco fisso (passando 
nei registri traccia, testina, settore iniziale, sectors count) 
e ABSWrite sui floppy (facevo delle copie fisiche di immagini di 
floppy), ma ABSWrite sul disco fisso .... non so, non ho mai 
osato per una forma di pudore reverenziale.
Poi, quando lasciai Win3.11 per il '98 mi accorsi che quel 
programma non girava più e debuggando mi sono accorto che la 
chiamata all'interrupt bios del disco rigido veniva intercettata 
in modo protetto, e ritornava senza errori ma coi registri 
corrotti :_(
Bisognerebbe studiare DevideIOControl .... se qualcuno riesce a 
cavarci qualcosa, spero vivamente che condivida sul NG !
Ciao
CCCP++Mario


 esempio 6 pezzi da 1giga devo avere come spazio libero almeno 6giga.
Non funziona con
type secondopezzo.mpg >> primopezzo.mpg
?
Alla fine dovresti trovarti in primopezzo l'unione dei due (se funziona in
modo binario :P ).
Ciao
--
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 FAT appunto (e quindi della versione di Windows etc etc).
ghgh dai su che vuoi che sia :ppp
un po di Asm, un paio di chiamate a qualche int e passa la paura !!! :p
-- 
-Gigio@Work(?)-

 ?
Credo proprio di no... equivarrebbe ad aprire con un editore di testo il 
file, fare un copia e incolla e salvare :)
Type non usa la modalità binaria. E comunque il problema principale è 
che c'è un grosso trasferimento di dati in ogni caso. Che si usi un 
programma in VB, che si scriva una routine in C, che si usi MS-DOS col 
comando OPY, c'è sempre da copiare 1 GB di dati.
L'unica soluzione RAPIDA è quella postata da Gigio: modificare il 
filesystem in modo da unire i due file a livello di tabella di 
allocazione dei file.
-- 
Quando noi ignoranti eravamo di più,
tutto era più bello...
(A. Celentano)


wrote:


 interessare a molti.
Scusate se faccio l' uccello del malaugurio, ma la soluzione proposta da
Gigio funziona solamente sul disco locale.
Saluti,
        Simone!

 interessare a molti.
intanto ti invio a cercare sw di 3° parti che fanno proprio lo sporco del
lavoro
in 10secondi ho trovato questo :
http://www.gratisdivx.com/downloads.asp?id=500
non l'ho provato, ma sono sicuro che trattandosi di video in giro ci saranno
programmi gia' ottimizzati all'uopo!
(minghia e mo' dove mi e' uscito sto uopo ? ho fatto l'uopo ?)
-- 
-Gigio@Work(?)-

lo provato ma non funziona, non li fa neanche aprire i miei video e
cmq non posso usare un programma di 3° parti deve essere una funzione
del mio programma a fare "questo sporco lavoro" :)
...cmq grazie lo stesso ;)
Bye!
