EDITED : 텍스트 파일의 내용을 문자열 배열로 변환하고 형식이없는 다른 파일에 쓰고 생성 된 파일을 gzip으로 압축해야했습니다.Streamreader를 사용하여 파일 내용을 문자열 배열로 변환 한 다음 압축
아래에 필자는 필요한 경우 해독 과정뿐만 아니라 발견 한 해답을 제공했습니다.
EDITED : 텍스트 파일의 내용을 문자열 배열로 변환하고 형식이없는 다른 파일에 쓰고 생성 된 파일을 gzip으로 압축해야했습니다.Streamreader를 사용하여 파일 내용을 문자열 배열로 변환 한 다음 압축
아래에 필자는 필요한 경우 해독 과정뿐만 아니라 발견 한 해답을 제공했습니다.
이 내가이 경우에 의지 감아 것입니다.
string jobDirVar = [FilePath];
byte[] bytesToCompress = File.ReadAllBytes(jobDirVar);
byte[] decompressedBytes = new byte[bytesToCompress.Length];
using (FileStream fileToCompress = File.Create(FilePath))
{
using (GZipStream compressionStream = new GZipStream(fileToCompress, CompressionMode.Compress))
{
compressionStream.Write(bytesToCompress, 0, bytesToCompress.Length);
}
}
using (FileStream fileToDecompress = File.Open(FilePath, FileMode.Open))
{
using (GZipStream decompressionStream = new GZipStream(fileToDecompress, CompressionMode.Decompress))
{
decompressionStream.Read(decompressedBytes, 0, bytesToCompress.Length);
}
}
그것은 코딩의 예쁜 비트 아니지만, 내가 후 무엇으로 저를 제공 한 것으로 보인다. 조금이라도 합리화할만한 것이 있다면 누구나 아직도 듣고 싶습니다.
.NET Framework는 기본 라이브러리에 System.IO.Compression.DeflateStream
클래스를 제공합니다. DEFLATE 압축 알고리즘을 구현합니다. zlib 스트림은 zlib 매직 바이트 다음에 DEFLATE 알고리즘으로 압축 된 내용입니다.
oops, gzip보다 원시인 "zlib"스트림에 대한 지침을 제공했습니다. gzip에는 압축 된 압축 컨텐츠 외에도 디렉토리 및 기타 항목이 있습니다.
gzip의 경우 Mike_G의 답변과 같이 프레임 워크의 System.IO.Compression.GZipStream
클래스를 사용하십시오.
조금이라도 확장 할 수 있다면 어떨까요? 그것은 내가 찾고있는 라인을 따라있는 것 같지만, 조금은 ... 나는 여전히 그린처럼 누군가를 알 수 없다. 죄송합니다. :/ – Eiketsu
이것은 내가 gzip으로 보내고 객체를 사용할 것입니다 :
byte[] initialBytes = //object serialized to bytes
byte[] compressedBytes;
using (MemoryStream stream = new MemoryStream(initialBytes))
{
using (MemoryStream output = new MemoryStream())
{
using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress))
{
Pump(stream, zipper);
}
compressedBytes = output.ToArray();
}
}
return compressedBytes;
//pump method
internal static void Pump(Stream input, Stream output)
{
byte[] bytes = new byte[4096];
int n;
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
내가 파일을해야하는 경우가 :
byte[] result;
using(FileStream file = //some filestream I created)
{
file.Position = 0;
using (MemoryStream output = new MemoryStream())
{
using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress))
{
Pump(file, zipper);
}
result = output.ToArray();
}
}
return result;
나는 이것을 사용해보고 내가 관리 할 수있는 것을 보게 될 것이다. 고맙습니다. :) – Eiketsu
아예 또한 파일 스트림에 대한 메소드 추가 –
간략한 설명이있는 원래의 질문입니다. – Eiketsu