Salvar arquivo de um byte [] em C # NET 3.5
-
06-09-2019 - |
Pergunta
Meu TCP cliente recebe uma imagem dentro de uma imagem packet.The é comprimido com tarefa zlib.The é descomprimir a imagem e colocá-lo no formulário.
Estou planejando para salvar a imagem compactada no diretório atual, descompactá-lo e carregar o arquivo descompactado no formulário.
O primeiro problema vem com salvar o arquivo (comprimido) .A zlib pode salvá-lo descomprimido.
O código a seguir carrega o arquivo compactado e salva-lo após a descompressão.
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();
}
Como passar o byte [] array diretamente para essa função? Estou planejando para salvá-lo como comprimido e, em seguida, chamar a função com a localização do arquivo compactado, mas eu não sei nem como salvar um arquivo a partir de uma matriz byte [], nem uma maneira de passar o byte [] array como o arquivo de entrada.
Qualquer ajuda será muito apreciada.
Graças.
Solução
Use as System.IO.File.WriteAllBytes static void (string path, byte [] bytes) método.
byte[] buffer = new byte[200];
File.WriteAllBytes(@"c:\data.dmp", buffer);
Outras dicas
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();
}
Além do que todos os outros já declarou, eu também sugiro que você use 'usando' cláusulas já que todos esses objetos implementar IDisposable.
using(FileStream outFileStream = new ...)
using(ZOutputStream outZStream = new ...)
using(FileStream inFileStream = new ...)
{
CopyStream(inFileStream, outZStream);
}
Vara da matriz de bytes que você recebeu em um MemoryStream
e comprimir / descomprimir na mosca sem usar arquivos temporários.
Você pode tentar este código
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();
}