Проблема в кодировании Base64 и декодировании в C # - PullRequest
0 голосов
/ 29 сентября 2010

У меня возникла проблема при кодировании и декодировании файла pdf или docx. Пожалуйста, найдите код ниже.

string FileName = @"C:\Tips.docx";   
FileStream inFile = new FileStream(FileName, FileMode.Open, FileAccess.Read);
binarydata = new byte[inFile.Length];   
string Base64String = System.Convert.ToBase64String(binarydata,0,binarydata.Length);
byte[] decoded = System.Convert.FromBase64String(Base64String);
StreamWriter writer = new StreamWriter(@"C:\Tips1.docx", false, System.Text.Encoding.ASCII);
writer.Write(Base64String);
writer.Close();

Я не могу открыть файл Tips1.docx, говоря, что файл поврежден.*

Может кто-нибудь сказать мне, что не так в коде?

Ответы [ 3 ]

4 голосов
/ 29 сентября 2010

Вы не читаете данные - вы просто создаете байтовый массив соответствующей длины и затем конвертируете этот массив нулей в основание 64.

Используйте File.ReadAllBytes, чтобы очень просто прочитать файл в память ... или, если вы действительно хотите сделать это вручную, зациклите чтение данных в буфер - вы не должны полагаться на один вызов Stream.Read, чтобы прочитать все.

Если вы хотите записать двоичные данные, используйте File.WriteAllBytes, а для записи текста используйте File.WriteAllText.

Даже если вам удалось записать данные base64, вы не сможете открыть их, как в Word - потому что это просто текстовый файл с текстом base64 ... вы либо вы хотите записать декодированные двоичные данные, или , вы хотите записать данные base64 во что-то, что затем декодирует их позже. (В настоящее время вы просто выбрасываете декодированные данные.)

Наконец, не то, что во времена, когда вы делаете , используете StreamWriter, вы должны использовать оператор using, чтобы убедиться, что он удаляется, даже если он вызывает исключение.

0 голосов
/ 29 сентября 2010

Если вы намереваетесь на самом деле скопировать контент, было бы намного проще использовать метод System.IO.File.Copy().

0 голосов
/ 29 сентября 2010

Вы не читаете данные, а также записываете данные Base64, а не декодированный двоичный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...