我正在使用XmlReader来解析XML文档。其中一个节点包含base64编码数据,我想解码它。这就是我的工作:
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
但该文件为空,文件大小为0 kB。我也试过这个没有成功:
byte[] buffer = new byte[4096];
int readBytes = 0;
using (FileStream outputFile = File.OpenWrite (path))
using (BinaryWriter bw = new BinaryWriter (outputFile)) {
while ((readBytes = reader.ReadElementContentAsBase64 (buffer, 0, 4096)) > 0) {
bw.Write (buffer, 0, readBytes);
}
}
我不明白。 readBytes 不为空,因此数据在这里。如果我临时将流保存为文件并convert它然后它可以工作(所以我不使用byte[] buffer = new byte[4096];
int readBytes = 0;
FileStream outputFile = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
BinaryWriter bw = new BinaryWriter (outputFile);
while ((readBytes = reader.ReadElementContentAsBase64 (buffer, 0, 4096)) > 0) {
bw.Write (buffer, 0, readBytes);
}
outputFile.Close ();
)。我在Mac上使用Xamarin Studio,这段代码嵌入到dll中。
我做错了什么或者这是一个错误?我遇到的问题是decoding doesn't work correctly,但是文件是空的?这可能是什么原因?我可以检查什么?
修改
现在我在没有ReadElementContentAsBase64
的情况下尝试了它,但文件的大小仍为0 kB。在这里,您可以看到 reader 的实现:
BinaryWriter
答案 0 :(得分:0)
似乎在Xamarin.iOS上有一些broken(或者至少与Windows上的.Net不一致)ReadElementContentAsBase64
。从您的earlier question开始,您的环境中似乎可以使用FromBase64Transform
,因此请尝试一下,它会产生与Windows上的ReadElementContentAsBase64
算法相同的结果:
// Advance to the text value of the element.
if (reader.NodeType == XmlNodeType.Element)
reader.Read();
// But make sure there is text value!
if (reader.NodeType == XmlNodeType.Text)
{
var charBuffer = new char[4096];
using (var fileStream = File.OpenWrite(path))
using (var transform = new FromBase64Transform(FromBase64TransformMode.IgnoreWhiteSpaces))
using (var cryptoStream = new CryptoStream(fileStream, transform, CryptoStreamMode.Write))
using (var bufferedStream = new BufferedStream(cryptoStream, charBuffer.Length))
{
int charRead;
while ((charRead = reader.ReadValueChunk(charBuffer, 0, charBuffer.Length)) != 0)
{
for (int i = 0; i < charRead; i++)
bufferedStream.WriteByte(checked((byte)charBuffer[i]));
}
}
Debug.WriteLine("Wrote " + path);
}
答案 1 :(得分:0)
在处理 WRITERS 时,有一种有用的方法 FLUSH ,可将数据发送到基础 STREAM 。我不知道在这种情况下它是否会有所帮助,但值得尝试。
答案 2 :(得分:0)
现在我尝试将文件保存在另一个目录中,但是在旧目录中已经同时写入了。所以我从一开始就经历了我的代码并发现了问题:
XMLReader
完成工作后,我在同一条路径上写了一个空字符串。哎哟!
现在文件写得正确,但内容错误(这就是错误)。谢谢所有试图帮助我的人!