将文本和二进制文件写入同一文件

时间:2015-04-23 22:15:13

标签: c# bytearray filestream streamwriter

我无法弄清楚如何在StreamWriter之间切换以写出文本和FileStream将byte []转储到文件中。

我使用StreamWriter手动在文本中写出XML(我有理由不使用XMLWriter)。在两个部分中,需要将byte []数组转储到文件中(TIF图像)。我知道是否能以某种方式完成,因为我试图模仿我们从供应商处获得的文件。我试图使用StreamWriter并使用ISO-8859-1将byte []转换为字符串,但还有一些额外的字符使它成为无效的TIF。

我是否过度思考这个?我是否需要关闭StreamWriter,重新打开文件并使用FileStream追加,关闭并重新打开StreamWriter以写入其他文本?

编辑:好的,这几乎可以。二进制部分现在很好,但是每个字符之间的所有文本部分都有0x00。

            using (System.IO.FileStream fileST = new System.IO.FileStream(filenameST, FileMode.Create, FileAccess.Write))
            {
                string z;
                fileST.Write(Encoding.Unicode.GetBytes(z =""), 0, z.Length);
                fileST.Write(Encoding.Unicode.GetBytes(z =partID), 0, z.Length);
                fileST.Write(Encoding.Unicode.GetBytes(z ="Content-Type: text/xml; charset=UTF-8"), 0, z.Length);
                fileST.Write(Encoding.Unicode.GetBytes(z ="Content-Transfer-Encoding: binary"), 0, z.Length);
                fileST.Write(Encoding.Unicode.GetBytes(z ="Content-Id: <" + contentID + ">"), 0, z.Length);
                fileST.Write(Encoding.Unicode.GetBytes(z =""), 0, z.Length);
//truncated
                fileST.Write(Encoding.Unicode.GetBytes(z =imagekey + "00FBW"), 0, z.Length);// + System.Convert.ToBase64String(Miscellaneous.MiscTools.GEncheckImageFront(outputPath, font)), 0, z.Length);
                fileST.Write(aFrontImage, 0, aFrontImage.Length);
}

其中aFrontImage是tif文件的byte []。

原始代码是:

                using (System.IO.StreamWriter fileST = new System.IO.StreamWriter(filenameST))
            {
                string partID = "------=_Part_" + partline1 + "_" + partline2 + ".0" + XMLdata[i, 0].GetLast(4) + XMLdata[i, 3].GetLast(5) + "321";
                string contentID = Guid.NewGuid().ToString().Replace("-", "").ToUpper();
                fileST.WriteLine("");
                fileST.WriteLine(partID);
                fileST.WriteLine("Content-Type: text/xml; charset=UTF-8");
                fileST.WriteLine("Content-Transfer-Encoding: binary");
                fileST.WriteLine("Content-Id: <" + contentID + ">");
                fileST.WriteLine("");

1 个答案:

答案 0 :(得分:1)

只需转换字符串并将所有字节写入文件即可。根据您的编码,您可以执行以下操作:

Bar