GZipStream<->File - Komprimierungs/Dekomprimierungsproblem
-
Hallo zusammen.
Habe mir eine kleine Gzip-Funktion erstellt, um Dateien zu komprimieren, bzw. zu dekomprimieren...
Definitionen:#define SOURCENOTFOUND "101" #define DESTEXISTS "102" #define CANTCREATEFILE "103" #define GZIPFILENOTFOUND "190"using:
using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::IO; using namespace System::IO::Compression; using namespace System::Drawing; using namespace System::Text;Funktionen:
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { try { CompressFile("C:\\testtext.txt", "C:\\testtext.gz"); } catch (Exception ^ex) { if (ex->Message==SOURCENOTFOUND) { /* Quelldatei nicht gefunden */ } if (ex->Message==DESTEXISTS) { /* Ziel existiert bereits */ } if (ex->Message==CANTCREATEFILE) { /* Ziel konnte nicht erstellt werden. */ } } try { DecompressFile("C:\\testtext.gz", "C:\\testziel.txt"); } catch (Exception ^ex) { if (ex->Message==GZIPFILENOTFOUND) { /* Gzip-Datei nicht gefunden. */ } if (ex->Message==DESTEXISTS) { /* Ziel schon vorhanden */ } if (ex->Message==CANTCREATEFILE) { /* Ziel konnte nicht erstellt werden */ } } } public: void CompressFile(String^ inputFileName, String^ outputFileName) { if (!File::Exists(inputFileName)) throw gcnew Exception(SOURCENOTFOUND); if (File::Exists(outputFileName)) throw gcnew Exception(DESTEXISTS); array<Byte>^ buffer = gcnew array<Byte>(4096); FileStream^ inputFile; int n = 0; inputFile = gcnew FileStream(inputFileName, FileMode::Open, FileAccess::Read, FileShare::Read); FileStream^ outputFile = File::Create(outputFileName); if (!File::Exists(outputFileName)) throw gcnew Exception(CANTCREATEFILE); GZipStream^ gzip = gcnew GZipStream(outputFile, CompressionMode::Compress); while((n = inputFile->Read(buffer, 0, buffer->Length)) != 0) { gzip->Write(buffer, 0, n); } gzip->Close(); inputFile->Close(); outputFile->Close(); } public: void DecompressFile(String^ inputFileName, String^ outputFileName) { array<Byte>^buffer = gcnew array<Byte>(4096); if (!File::Exists(inputFileName)) throw gcnew Exception(GZIPFILENOTFOUND); if (File::Exists(outputFileName)) throw gcnew Exception(DESTEXISTS); FileStream^ inputFile = gcnew FileStream(inputFileName, FileMode::Open); FileStream^ outputFile = File::Create(outputFileName); if (!File::Exists(outputFileName)) throw gcnew Exception(CANTCREATEFILE); GZipStream^ gzip = gcnew GZipStream(outputFile, CompressionMode::Decompress); int n = 0; while ((n = gzip->Read(buffer, 0, buffer->Length)) != 0) { outputFile->Write(buffer, 0, n); } gzip->Close(); inputFile->Close(); outputFile->Close(); }Beim Schreiben der Datei testtext.txt (85 Byte) ins Gzip-Format läuft die Komprimierung soweit gut (also es besteht Inhalt... 182 Byte).
Jedoch beim Dekomprimieren wird zwar die Zieldatei geschrieben, sofern sie nicht existiert, aber der Inhalt (Testziel.txt) ist 0-Byte lang.
Wer kann mir sagen, wo der Fehler liegt? Visual C++ 2005 macht keinerlei Fehlermeldung beim Build, sowie auch keine sonstigen Exceptions.
-
GZipStream^ gzip = gcnew GZipStream(inputFile, CompressionMode::Decompress);