[c#] 파일을 Base64String으로 변환하고 다시 다시 변환

제목은 모든 것을 말합니다.

  1. 나는 그렇게 tar.gz 아카이브에서 읽었다.
  2. 파일을 바이트 배열로 나누기
  3. 해당 바이트를 Base64 문자열로 변환
  4. Base64 문자열을 다시 바이트 배열로 변환
  5. 해당 바이트를 새 tar.gz 파일에 다시 씁니다.

두 파일의 크기가 같은 것을 확인할 수 있지만 (아래 방법이 true를 반환 함) 더 이상 복사본 버전을 추출 할 수 없습니다.

내가 뭔가를 놓치고 있습니까?

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);
}

편집 : 작업 예제는 훨씬 더 간단합니다 (@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);
}

감사!



답변

어떤 이유로 파일을 base-64 문자열로 변환하려는 경우. 인터넷 등을 통해 전달하고 싶다면 이렇게 할 수 있습니다.

Byte[] bytes = File.ReadAllBytes("path");
String file = Convert.ToBase64String(bytes);

그리고 이에 따라 파일로 다시 읽습니다.

Byte[] bytes = Convert.FromBase64String(b64Str);
File.WriteAllBytes(path, bytes);


답변

private String encodeFileToBase64Binary(File file){
String encodedfile = null;
try {
    FileInputStream fileInputStreamReader = new FileInputStream(file);
    byte[] bytes = new byte[(int)file.length()];
    fileInputStreamReader.read(bytes);
    encodedfile = Base64.encodeBase64(bytes).toString();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block  
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block  
    e.printStackTrace();
}
    return encodedfile;
}


답변