2014-09-29 2 views
1

Я получаю содержимое моего png-файла, преобразовывая этот файл, и я хочу записать его в свой D-диск. Его мой код:Как написать PNG-файл в C#

s = File.ReadAllText(openFileDialog1.FileName.ToString()); 

File.WriteAllText(@"D:\result.png", s); 

но результат не совпадает с выбранным файлом (.png), и когда я это пишу, он будет поврежден. Я также использовал кодировку ASCII и UTF, но ничего не изменилось ...

любая идея? Thanks

+0

PNG-файл не является текстовым файлом, поэтому вы не можете его прочитать. – DavidG

+0

так как я могу это сделать? Я хочу добавить несколько байтов в конец моего файла и записать его. Как мне это сделать? – Elahe

+0

Какие данные вы хотите добавить в файл? Похоже, что есть лучший способ добиться этого. – DavidG

ответ

1
//Read All Bytes 
byte[] fileBytes = File.ReadAllBytes(openFileDialog1.FileName.ToString()); 

//Data that needs to added, converted to bytes, Better off making a function for this 
String str = "Data to be added"; 
byte[] newBytes = new byte[str.Length * sizeof(char)]; 
System.Buffer.BlockCopy(str.ToCharArray(), 0, newBytes, 0, newBytes.Length); 

//Add the two byte arrays, the file bytes, the new data bytes 
byte[] fileBytesWithAddedData = new byte[ fileBytes.Length + newBytes.Length ]; 
System.Buffer.BlockCopy(fileBytes, 0, fileBytesWithAddedData, 0, fileBytes.Length); 
System.Buffer.BlockCopy(newBytes, 0, fileBytesWithAddedData, fileBytes.Length, newBytes.Length); 

//Write to new file 
File.WriteAllBytes(@"D:\result.png", fileBytesWithAddedData); 
+0

Хотя это правильно, это немного сумасшествие, которое нужно делать в первую очередь. Именно поэтому я не опубликовал аналогичный ответ. Просто потому, что вы МОЖЕТЕ сделать что-то, не означает, что вы ДОЛЖНЫ это сделать. – DavidG

+0

@DavidG: «Стеганография» - это место, где требуются такие вещи. Пожалуйста, не предполагайте, что вы всегда знаете, есть ли какое-либо требование, которое действительно или нет. –

+0

Здесь есть предположение, что есть только добавление, а не манипуляция существующими байтами. –

3

PNG - это двоичные данные, а не текст. Вам нужно прочитать все байт и написать их.

Кажется, что вы просто ищете File.Copy.

Чтобы прочитать все байты, используйте удобно названный метод File.ReadAllBytes().

+0

Нет, я не хочу точно копировать. Я хочу добавить к нему несколько байтов – Elahe

+2

@Elahe Добавление байтов в PNG, вероятно, приведет к разрыву файла. – DavidG

+0

Я протестировал его Free Hex Editor Neo. Я добавил несколько байтов в конец файла и сохранил его. Это сработало и не повредило – Elahe

Смежные вопросы