Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用c编写PNG文件#_C#_Winforms - Fatal编程技术网

C# 如何用c编写PNG文件#

C# 如何用c编写PNG文件#,c#,winforms,C#,Winforms,我通过转换这个文件获得png文件的内容,我想把它写在我的D驱动器中。这是我的代码: s = File.ReadAllText(openFileDialog1.FileName.ToString()); File.WriteAllText(@"D:\result.png", s); 但是结果与所选文件(.png)不一样,当我写入它时,它可能会被损坏。 我也使用了ASCII编码和UTF,但没有任何改变 有什么想法吗? 谢谢,PNG是二进制数据,不是文本。您需要读取并写入所有字节 看起来你只是在找

我通过转换这个文件获得png文件的内容,我想把它写在我的D驱动器中。这是我的代码:

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

File.WriteAllText(@"D:\result.png", s);
但是结果与所选文件(.png)不一样,当我写入它时,它可能会被损坏。 我也使用了ASCII编码和UTF,但没有任何改变

有什么想法吗?
谢谢,PNG是二进制数据,不是文本。您需要读取并写入所有字节

看起来你只是在找


要读取所有字节,请使用方便命名的方法。

PNG是二进制数据,而不是文本。您需要读取并写入所有字节

看起来你只是在找



要读取所有字节,请使用方便命名的方法。

PNG文件不是文本文件,因此您不能像这样读取它。那么我如何才能做到这一点?我想在文件的末尾添加一些字节并写入它。我该怎么做?您想向文件中添加哪些数据?听起来可能有更好的方法来实现这一点。通常,当我在C#中处理图像时,我使用的是
[Bitmap Class](http://msdn.microsoft.com/en-us/library/system.drawing.bitmap(v=vs.110).aspx)
并将数据保持在文件和位图对象之间。PNG文件不是文本文件,因此您不能像这样读取它。那么我如何才能做到这一点?我想在文件的末尾添加一些字节并写入它。我该怎么做?您想向文件中添加哪些数据?听起来可能有更好的方法来实现这一点。通常,当我在C#中处理图像时,我使用的是
[Bitmap Class](http://msdn.microsoft.com/en-us/library/system.drawing.bitmap(v=vs.110).aspx)
并将数据保持在文件和位图对象之间。不,我不想完全复制。我想添加一些字节到it@Elahe向PNG中添加字节可能会破坏该文件。我使用免费的十六进制编辑器Neo对其进行了测试。我在文件末尾添加了一些字节并保存了它。它起作用了,但没有。达马加诺,我不想完全照搬。我想添加一些字节到it@Elahe向PNG中添加字节可能会破坏该文件。我使用免费的十六进制编辑器Neo对其进行了测试。我在文件末尾添加了一些字节并保存了它。虽然这是正确的,但从一开始就有点疯狂。这就是为什么我没有发布类似的答案。仅仅因为你能做一些事情,并不意味着你就应该做。@DavidG:
隐写术是一个需要这样做的地方。请不要假设您总是知道是否存在有效的需求。这里有一个假设,即只存在追加,而不存在对现有字节的任何操作。@Christopher:OP清楚地说
我想在文件末尾添加一些字节并编写它。
仍然吗?我可能会使用两次写入而不是重新分配。虽然这是正确的,但一开始这样做有点疯狂。这就是为什么我没有发布类似的答案。仅仅因为你能做一些事情,并不意味着你就应该做。@DavidG:
隐写术是一个需要这样做的地方。请不要假设您总是知道是否存在有效的需求。这里有一个假设,即只存在追加,而不存在对现有字节的任何操作。@Christopher:OP清楚地说
我想在文件末尾添加一些字节并编写它。
仍然吗?我可能会使用两次写入,而不是重新分配。
//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);