Tytuł mówi wszystko:
- Czytałem w takim archiwum tar.gz
- rozbić plik na tablicę bajtów
- Przekonwertuj te bajty na ciąg Base64
- Przekonwertuj ten ciąg Base64 z powrotem na tablicę bajtów
- Zapisz te bajty z powrotem do nowego pliku tar.gz
Mogę potwierdzić, że oba pliki mają ten sam rozmiar (poniższa metoda zwraca prawdę), ale nie mogę już wyodrębnić wersji kopii.
Czy coś mi brakuje?
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);
}
EDYCJA: Przykład roboczy jest znacznie prostszy (dzięki @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);
}
Dzięki!
c#
base64
streamreader
system.io.fileinfo
darkpbj
źródło
źródło
Odpowiedzi:
Jeśli z jakiegoś powodu chcesz przekonwertować plik na ciąg base-64. Na przykład, jeśli chcesz to przekazać przez internet, itp ... możesz to zrobić
I odpowiednio przeczytaj z powrotem do pliku:
źródło
źródło
java
jeśli OP używac#
?