C# 如何在Windows应用商店应用程序中写入二进制文件?
我正在尝试实现StreamSocket通信,服务器现在正在向我发送字节为[]的“.zip”文件。内存中的字节[]看起来不错(字节数与服务器中的原始.zip文件相同),但当我将这些字节保存到文件中时,解压程序会说它“已损坏” 我尝试了几种选择,但没有一种对我有效: 一, 二, 三, 四, 如果有人有一些新想法,请分享C# 如何在Windows应用商店应用程序中写入二进制文件?,c#,windows-store-apps,C#,Windows Store Apps,我正在尝试实现StreamSocket通信,服务器现在正在向我发送字节为[]的“.zip”文件。内存中的字节[]看起来不错(字节数与服务器中的原始.zip文件相同),但当我将这些字节保存到文件中时,解压程序会说它“已损坏” 我尝试了几种选择,但没有一种对我有效: 一, 二, 三, 四, 如果有人有一些新想法,请分享 问候。什么叫“他们都不为我工作”?你收到了什么错误,你期望什么?所有的选项都创建了一个字节在里面(1MB大小)的文件,但是当我尝试解压时,这个文件就被破坏了。那么,你在十六进制编辑器
问候。什么叫“他们都不为我工作”?你收到了什么错误,你期望什么?所有的选项都创建了一个字节在里面(1MB大小)的文件,但是当我尝试解压时,这个文件就被破坏了。那么,你在十六进制编辑器中打开了结果了吗?是否某些字节未正确存储,或者通过
StorageFile
或其他方式创建的文件上是否有额外的头?应用程序创建的文件到底有什么问题?根据您目前提供给我们的信息“解压程序说文件无效”,您可能从服务器获取了虚假数据。@Ben Voigt在您发表评论前几秒钟,我意识到我没有进行任何十六进制比较。完成后我会做一些更新。好的。。所以我比较了两个文件,它们是不同的。在检查了整个协议一段时间后,我发现服务器希望开始发送文件时有一个偏移量,而我一直在发送上一个接收到的文件的大小,因此.zip文件的第一部分从未发送过。现在,修复了这个问题,我尝试使用我使用的第一个选项保存文件,效果很好。我不知道该如何结束这个问题,因为这个问题有答案。
var file = await StorageFile.CreateFileAsync();
using(var stream = await file.OpenStreamForWriteAsync())
{
stream.Write(myBytes, ...);
}
var file = await StorageFile.CreateFileAsync();
await FileIO.WriteBytesAsync(file, myBytes);
var file = await StorageFile.CreateFileAsync();
using (var fileStream = await file.OpenStreamForWriteAsync())
{
var sessionData = new MemoryStream(myBytes);
sessionData.Seek(0, SeekOrigin.Begin);
await sessionData.CopyToAsync(fileStream);
}
var file = await StorageFile.CreateFileAsync();
using (var writer = new BinaryWriter(await file.OpenStreamForWriteAsync())
{
writer.WriteBytes(myBytes);
}