c# - 获取base64编码文件的文件名

时间:2017-03-10 14:02:15

标签: c# .net xml encoding base64

我试图获取infopath 2007附件文件的名称(在xml中,默认情况下在base64Binary中编码),我之前用相同的代码实现了这个,但由于某种原因我无法获得原始文件名,我现在使用的xml文件中的附件(我需要找到附件的.extension,文件也需要与之前的名称相同),但如果我手动编写文件扩展名,我可以导出文件,所以我的问题是:为什么我能成功地从base64字符串中写入文件,而且我无法得到它的名字 备注:

编写文件的代码(有效):

public static void decodeFromBase64(string encodedString)
{
    using (FileStream stream = System.IO.File.Create("D:\\some dir\\file.png"))
    {
        byte[] byteArray = Convert.FromBase64String(file);
        stream.Write(byteArray, 0, byteArray.Length);
    }
}

获取文件名的代码,抛出:' System.ArgumentOutOfRangeException'的这里:  / ********************************************** /

byte[] _fileNameBytes = _theReader.ReadBytes(_attachmentNameLength);

/ ********************************************** /

  public static string getFileName(string attachedFile)
    {
        string fname;
        byte[] thdata = Convert.FromBase64String(attachedFile);

            Encoding _encoding = Encoding.Unicode;
            using (MemoryStream _memoryStream = new MemoryStream(thdata))
            {

                BinaryReader _theReader = new BinaryReader(_memoryStream);
                _theReader.BaseStream.Position = 0;
                byte[] _headerData = _theReader.ReadBytes(16);

                int _fileSize = (int)_theReader.ReadUInt32();
                int _attachmentNameLength = (int)_theReader.ReadUInt32() * 2;

                byte[] _fileNameBytes = _theReader.ReadBytes(_attachmentNameLength);
                fname = _encoding.GetString(_fileNameBytes, 0, _attachmentNameLength - 2);
                if (fname.Length > 0)
                    return fname;
            }
        return fname;
    }

修改

  • 我忘了提到前一段时间使用相同的代码我试图解码从以前的文件编码的字符串并且它有效

EDIT2:
##############################已解决################ #################
即使我发现解决方案我不确定问题的确切来源。我的编码字符串的完整性在某种程度上被破坏了(不知怎的,我搞砸了我的测试模板的构造,在测试附件所在的xml文件之后,一切都变得很棒 ALSO 唯一的编码字符串不起作用的文件到目前为止是我自己的,考虑到我之前从未使用过infopath,这是完全合理的) 供将来参考:这里是官方解码器和编码器类

  • InfoPath 2003
    support.microsoft _com / zh-CN / help / 892730 / how-to-encode-and-decode-a-file-attachment-programming-by-visual-c-in-infopath-2003
  • InfoPath 2007和2010
    support.microsoft _com / zh-CN / help / 2517906 / how-to-encoding-and-to-decode-a-file-attachment-programming-by-visual-c-in-infopath-2010-or-in -infopath 2007

    (无法发布超过2个链接,我稍后会对其进行修改)

0 个答案:

没有答案