O título diz tudo:
- Eu li em um arquivo tar.gz como este
- divida o arquivo em um array de bytes
- Converta esses bytes em uma string Base64
- Converta aquela string Base64 de volta em uma matriz de bytes
- Grave esses bytes de volta em um novo arquivo tar.gz
Posso confirmar que os dois arquivos têm o mesmo tamanho (o método abaixo retorna verdadeiro), mas não consigo mais extrair a versão da cópia.
Estou esquecendo de algo?
Boolean MyMethod(){
using (StreamReader sr = new StreamReader("C:\...\file.tar.gz")) {
String AsString = sr.ReadToEnd();
byte[] AsBytes = new byte[AsString.Length];
Buffer.BlockCopy(AsString.ToCharArray(), 0, AsBytes, 0, AsBytes.Length);
String AsBase64String = Convert.ToBase64String(AsBytes);
byte[] tempBytes = Convert.FromBase64String(AsBase64String);
File.WriteAllBytes(@"C:\...\file_copy.tar.gz", tempBytes);
}
FileInfo orig = new FileInfo("C:\...\file.tar.gz");
FileInfo copy = new FileInfo("C:\...\file_copy.tar.gz");
// Confirm that both original and copy file have the same number of bytes
return (orig.Length) == (copy.Length);
}
EDIT: O exemplo de trabalho é muito mais simples (graças a @TS):
Boolean MyMethod(){
byte[] AsBytes = File.ReadAllBytes(@"C:\...\file.tar.gz");
String AsBase64String = Convert.ToBase64String(AsBytes);
byte[] tempBytes = Convert.FromBase64String(AsBase64String);
File.WriteAllBytes(@"C:\...\file_copy.tar.gz", tempBytes);
FileInfo orig = new FileInfo(@"C:\...\file.tar.gz");
FileInfo copy = new FileInfo(@"C:\...\file_copy.tar.gz");
// Confirm that both original and copy file have the same number of bytes
return (orig.Length) == (copy.Length);
}
Obrigado!
Você não pode simplesmente mudar o conteúdo de um arquivo compactado assim. Você terá que descompactar o arquivo na etapa 1 em vez de apenas lê-lo diretamente como está. E então a etapa 5 também terá que recomprimir os dados em vez de apenas gravar os bytes diretamente.
—
itsme86 de
Felizmente, como não houve manipulação real do arquivo em si (basicamente apenas movendo-o do ponto A para B), esta tarefa em particular não requer nenhuma (de /) compressão
—
darkpbj