Jak napsat svůj vlastní poštovní směrovací třídu .net

hlasů
1

Chtěl jsem použít .NET je System.IO.Compression.GZipStream ke kompresi a dekompresi adresář. Ale zjistil jsem, že jen schopen komprimovat jeden soubor, jak mohu napsat třídu zip, která může komprimovat určitý adresář do souboru zip?

ps: nejsme dovoleno používat jakékoliv knihovny zip třetích stran

Položena 27/08/2009 v 04:48
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
4

Nejprve byste měli tar soubory.

UPRAVIT

Pokud máte pocit, dobrodružný proč si navrhnout vlastní záhlaví a psát každý ZIP souboru postupně. Ukládat všechny názvy souborů v záhlaví a index, kde začít.

Odpovězeno 27/08/2009 v 04:51
zdroj uživatelem

hlasů
3

Tam je spousta dokumentace na ZIP formátu. Wikipedia je dobré místo pro start: http://en.wikipedia.org/wiki/ZIP_file_format .

Můžete použít System.IO.Compression.DeflateStreampro vlastní kompresi, ale budete potřebovat implementaci CRC32, a budete muset rozložení souboru s správné hlavičky, atd

Je to non-triviální množství práce.

Dalo by se zvážit nákup komerční knihovnu .zip, pokud nejste schopni používat open-source knihovny. Neměli byste mít žádné právní problémy s použitím komerčního knihovny **, a náklady na zakoupení licence je téměř jistě levnější než náklady na vývoj a testování knihovny sami. Také zkontrolujte, zda kolem. Vaše společnost může mít licenci pro komerční knihovnu již.

** Nejsem právník, tak poraďte se se svým právním styku.

Odpovězeno 27/08/2009 v 06:17
zdroj uživatelem

hlasů
2

Pokud jste na 3.0 nebo vyšší, můžete použít System.IO.Packaging vytvářet soubory ZIP.

Odpovězeno 27/08/2009 v 05:27
zdroj uživatelem

hlasů
1

Máte několik možností

1. Pomocí Shell.Application
můžete volat na Shell. VBScript vypadá takto:

dim sa
set sa = CreateObject("Shell.Application")

Dim zip
Set zip = sa.NameSpace(pathToZipFile)

Dim d
Set d = sa.NameSpace(dirToZip)


For Each s In d.items
    WScript.Echo  s
Next


' http://msdn.microsoft.com/en-us/library/bb787866(VS.85).aspx
' ===============================================================
' 2nd arg is a bit field: 
' 4 = do not display a progress box
' 16 = Respond with "Yes to All" for any dialog box that is displayed.
' 128 = Perform the operation on files only if a wildcard file name (*.*) is specified. 
' 256 = Display a progress dialog box but do not show the file names.
' 2048 = Version 4.71. Do not copy the security attributes of the file.
' 4096 = Only operate in the local directory. Don't operate recursively into subdirectories.

WScript.Echo "copying files..."

zip.CopyHere d.items, 4

' CopyHere is asynchronous. Gotta wait til it's done. 
sLoop = 0
Do Until d.Items.Count <= zip.Items.Count
    Wscript.Sleep(1000)
Loop

Nevím, jestli je to přístupné z spravovaný kód, ale já bych, že ano. Je toho názoru, druh hacky ke mně ačkoli.

Také je nutné předem inicializovat .zip archivu před přidáním věci na něj:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim file
Set file = fso.CreateTextFile(pathToZipFile)

file.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, 0)

file.Close
Set fso = Nothing
Set file = Nothing

2. Provádět sami
Pokud nechcete používat Shell.Application, teoreticky byste mohli vytvořit svůj vlastní implementaci zip třídy, aniž by příliš mnoho problémů, a to zejména pokud mají omezené požadavky. Formát zip není mimořádně složitá, pokud nechcete implementovat šifrování, zip64, Unicode, časová razítka s vysokým rozlišením, streamování, a tak dále ...

3. Proveďte právní analýzu, a Re-Use
Spíše než trávit čas inženýrství vyvíjí novou implementaci, vyšetřovat implementace, které jsou tam teď. Někteří lidé se obávají o GPL se SharpZipLib. DotNetZip je uvolněn pod veřejnou licencí Microsoft, velmi tolerantní a žádné virové podmínek.

Odpovězeno 27/08/2009 v 06:54
zdroj uživatelem

hlasů
1

Použijte System.IO.Directory a System.IO.File třídy vyjmenovat všechny soubory a složky, to rekurzivně, aby vám soubor podsložky. Jakmile budete mít všechny soubory zip je jeden po druhém (nebo použít threadpool) a měli byste mít to, co potřebujete.

Odpovězeno 27/08/2009 v 04:52
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more