My TCPクライアントはパケット内で画像を受信します。画像はzlibで圧縮されています。タスクは画像を解凍してフォームに配置することです。
圧縮された画像を現在のディレクトリに保存し、解凍して、解凍されたファイルをフォームにロードすることを計画しています。
最初の問題は、ファイル(圧縮)の保存に関連しています。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();
}
Byte []配列をその関数に直接渡す方法は?圧縮して保存し、圧縮ファイルの場所で関数を呼び出す予定ですが、byte []配列からファイルを保存する方法も、byte []配列を渡す方法もわかりません。入力ファイルとして。
どんな助けも高く評価されます。
ありがとう。
Static void System.IO.File.WriteAllBytes(string path、byte [] bytes)メソッドを使用します。
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'句を使用することをお勧めします。
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();
}