質問

私のTCPクライアントがpacket.Theの画像内の画像を受信zlib.Theタスクで圧縮された画像を解凍し、フォーム上にそれを置くことです。

私は、現在のディレクトリに圧縮された画像を保存し、それを解凍し、フォーム上に解凍したファイルをロードすることを計画しています。

最初の問題は、ファイル、それは解凍保存することができます(圧縮)【選択のzlibを節約付属しています。

以下のコードは、圧縮されたファイルをロードし、解凍した後、それを保存します。

    private void decompressFile(string inFile, string outFile)
    {
        System.IO.FileStream outFileStream = new System.IO.FileStream(outFile, System.IO.FileMode.Create);
        zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outFileStream);
        System.IO.FileStream inFileStream = new System.IO.FileStream(inFile, System.IO.FileMode.Open);          
        try
        {
            CopyStream(inFileStream, outZStream);
        }
        finally
        {
            outZStream.Close();
            outFileStream.Close();
            inFileStream.Close();
        }
    }

    public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
    {
        byte[] buffer = new byte[2000];
        int len;
        while ((len = input.Read(buffer, 0, 2000)) > 0)
        {
            output.Write(buffer, 0, len);
        }
        output.Flush();
    }

その機能に直接バイト[]配列を渡す方法は? 私は圧縮されたとして、それを保存して、圧縮ファイルの場所で関数を呼び出すことを計画していないんだけど、私にはわからないどちらかバイト[]配列を渡すために、バイト[]配列や道からファイルを保存します入力ファイルとしてます。

すべてのヘルプは高く評価されます。

感謝します。

役に立ちましたか?

解決

静的ボイドSystem.IO.File.WriteAllBytesを使用する(文字列パス、バイト[]バイト)方法

byte[] buffer = new byte[200];
File.WriteAllBytes(@"c:\data.dmp", buffer);

他のヒント

public static void SaveFile(this Byte[] fileBytes, string fileName)
{
    FileStream fileStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
    fileStream.Write(fileBytes, 0, fileBytes.Length);
    fileStream.Close();
}

誰もがすでに述べたものに加えて、私はまた、あなたがすべてのそれらのオブジェクトがIDisposableインターを実装するため、句「を使用して」を使うことをお勧め。

using(FileStream outFileStream = new ...)
using(ZOutputStream outZStream = new ...)
using(FileStream inFileStream = new ...)
{
    CopyStream(inFileStream, outZStream);
}

MemoryStreamにあなたが受け取ったバイト配列をスティックや一時ファイルを使用せずに、その場でそれを解凍/圧縮します。

あなたはこのコードを試すことができます。

 private void t1()
    {
        FileStream f1 = new FileStream("C:\\myfile1.txt", FileMode.Open);
        int length = Convert.ToInt16(f1.Length);
        Byte[] b1 = new Byte[length];
        f1.Read(b1, 0, length);
        File.WriteAllBytes("C:\\myfile.txt",b1);
        f1.Dispose();
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top