Domanda

Nella mia applicazione, l'utente seleziona un file di grandi dimensioni (> 100 MB) sulla loro auto. Vorrei che per il programma per poi prendere il file che è stato selezionato e tagliare in parti archiviati che sono 100 MB o meno. Come si può fare? Quali librerie e file formato dovrei usare? Potreste darmi alcuni esempi di codice? Dopo il primo 100mb archiviata viene creata una parte, ho intenzione di caricarlo su un server, allora io caricare la parte successiva 100mb, e così via fino terminato l'upload. Dopo di che, da un altro computer, mi scaricare tutte queste parti archiviati, e poi desiderare di collegarli nel file originale . Questo è possibile con le librerie 7zip, per esempio? Grazie!

UPDATE: Dalla prima risposta, penso che ho intenzione di usare SevenZipSharp, e credo di capire ora come dividere un file in più parti 100MB archiviato, ma ho ancora due domande:

  1. E 'possibile creare il primo 100mb archiviata parte e caricarlo prima di creare la parte successiva 100mb?
  2. Come si fa a estrarre un file con SevenZipSharp da archivi multipli a spacco?

UPDATE # 2: Stavo solo giocando intorno con l'interfaccia grafica 7-zip e la creazione di multi-volume / Archivio parziali e ho trovato che la selezione del primo e l'estrazione da esso estrarrà tutto file da tutti gli archivi di divisione. Questo mi porta a credere che i percorsi alle parti successive sono inclusi nella prima (o è consecutivo?). Tuttavia, non sono sicuro se questo dovrebbe funzionare direttamente dalla console, ma cercherò che ora, e vedere se si risolve la domanda # 2 dal primo aggiornamento.

È stato utile?

Soluzione

Date un'occhiata a SevenZipSharp , è possibile utilizzare questo per creare il vostro sputo 7z file, fare qualsiasi cosa si desidera caricare loro, poi estrarli dal lato server.

Per dividere l'aspetto archivio al membro SevenZipCompressor.CustomParameters, passando in "v100m". (È possibile trovare ulteriori parametri nel file 7-zip.chm da 7zip)

Altri suggerimenti

È possibile dividere i dati in 100MB di "pacchetti" in primo luogo, e poi passare ogni pacchetto nel compressore a sua volta, fingendo che sono file appena separati.

Tuttavia, questo tipo di compressione è di solito basato sul flusso. Finché la biblioteca si sta utilizzando farà del suo I / O tramite una classe Stream-derivata, sarebbe piuttosto semplice da implementare il proprio stream che "packetises" i dati come più ti piace al volo - come dati viene passato il metodo Write () si scrive in un file. Quando si supera 100MB in quel file, è sufficiente chiudere il file e apre uno nuovo, e continuare a scrivere.

Uno di questi approcci permetterebbe di caricare facilmente uno "pacchetto", pur continuando a comprimere la successiva.

modifica

Giusto per essere chiari -. Decompressione è solo la sequenza inversa di quanto sopra, quindi una volta che hai il codice di compressione di lavoro, la decompressione sarà facile

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top