[C#] Datei packen

paebels

Erfahrenes Mitglied
Hallo
ich versuche eine Datei zu packen und zu entpacken. Es harpert aber schon am packen.
Code:
oid CVerzeichnisse::CompressFile(System::String^ path)
    {
		System::IO::FileStream^ sourceFile = System::IO::File::OpenRead(path);
		System::IO::FileStream^ destinationFile = System::IO::File::Create(path + ".gz");
		array<System::Byte>^ b = gcnew array<System::Byte>(sourceFile->Length);
		sourceFile->Read( b, 0, b->Length );
		GZipStream^ output = gcnew GZipStream(destinationFile,System::IO::Compression::CompressionMode::Compress);
		output->Write(b,0,(int)sourceFile->Length);
		// Close the files.
        sourceFile->Close();
        destinationFile->Close();
    }
Diesre Code packt zwar und mit tricks kann ich es entpacken und die Datei geht. Ich vermute der Fehler liebt am array<byte> ich versuche damit das Orginal aus c# umzusetzen.Hier der C# Code:
Code:
 FileStream sourceFile = File.OpenRead(path);
        FileStream destinationFile = File.Create(path + ".gz");

        byte[] buffer = new byte[sourceFile.Length];
        sourceFile.Read(buffer, 0, buffer.Length);
Kann mir da wer helfen das ich richtig Packe und nicht den Fehler eines MagicHeader zurückbekomme beim entpacken.
MFG
Oli
 
Diesre Code packt zwar und mit tricks kann ich es entpacken und die Datei geht.
Und was ist denn nun genau der Fehler? Das mit dem MagicHeader sagt mir nicht so viel...

Was mir aufgefallen ist: Auch den GZipStream musst du mit Close() schließen.

//Edit: Wenn du mit .NET 4 arbeitest, könntest du dir das Einlesen in ein Array sparen, indem du stattdessen mit der CopyTo()-Methode den Source-Stream direkt in den GZipStrem schreibst.


Gruß
MCoder
 
Zuletzt bearbeitet:
Hi.

Ich kann dein Problem nicht nachvollziehen. Bei mir (MSVC 10) funktioniert das problemlos.

Mach doch mal ein Minimalbeispiel welches man kompilieren kann.

Gruß
 
Zu einer guten Problembeschreibung gehört:

- kompilierbares Minimalbeispiel
- Compileraufruf (wenn relevant)
- Aufruf
- Eingabedaten (wenn relevant, wie hier)
- erwartete Ausgabe / Resultat
- tatsächliches Resultat

Also, mach einfach ein Minimalbeispiel + Eingabedateien, zippe es und lade es hoch.

Gruß
 
Zurück