Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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#_Bytearray_Filestream_Streamwriter - Fatal编程技术网

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

C# 将文本和二进制文件写入同一文件,c#,bytearray,filestream,streamwriter,C#,Bytearray,Filestream,Streamwriter,我很难弄清楚如何在StreamWriter和FileStream之间切换,前者写出文本,后者将字节[]转储到文件中 我正在使用StreamWriter以文本的形式手动写出XML(我不使用XMLWriter是有原因的)。在两个部分中,需要将字节[]数组转储到文件(TIF图像)中。我知道是否可以这样做,因为我试图模仿我们从供应商那里得到的文件。我试图使用StreamWriter并使用ISO-8859-1将字节[]转换为字符串,但有一些额外的字符被放入其中,使其成为无效的TIF 我是不是想得太多了?我

我很难弄清楚如何在StreamWriter和FileStream之间切换,前者写出文本,后者将字节[]转储到文件中

我正在使用StreamWriter以文本的形式手动写出XML(我不使用XMLWriter是有原因的)。在两个部分中,需要将字节[]数组转储到文件(TIF图像)中。我知道是否可以这样做,因为我试图模仿我们从供应商那里得到的文件。我试图使用StreamWriter并使用ISO-8859-1将字节[]转换为字符串,但有一些额外的字符被放入其中,使其成为无效的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);
}
使用(System.IO.FileStream fileST=new System.IO.FileStream(filenamet、FileMode.Create、FileAccess.Write))
{
字符串z;
fileST.Write(Encoding.Unicode.GetBytes(z=”“),0,z.Length);
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=“内容传输编码:二进制”),0,z.Length;
fileST.Write(Encoding.Unicode.GetBytes(z=“Content Id:”),0,z.Length);
fileST.Write(Encoding.Unicode.GetBytes(z=”“),0,z.Length);
//截断的
fileST.Write(Encoding.Unicode.GetBytes(z=imagekey+“00FBW”),0,z.Length);//+System.Convert.ToBase64String(杂项.missctools.GEncheckImageFront(outputPath,font)),0,z.Length);
fileST.Write(aFrontImage,0,aFrontImage.Length);
}
其中,aFrontImage是tif文件的字节[]

原代码为:

                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("");
使用(System.IO.StreamWriter fileST=new System.IO.StreamWriter(filenameST))
{
string partID=“--------=\u Part\u”+partline1+“\u”+partline2+”.0“+XMLdata[i,0]。GetLast(4)+XMLdata[i,3]。GetLast(5)+“321”;
字符串contentID=Guid.NewGuid().ToString().Replace(“-”,“”)。ToUpper();
fileST.WriteLine(“”);
文件集写入线(partID);
fileST.WriteLine(“内容类型:text/xml;charset=UTF-8”);
WriteLine(“内容传输编码:二进制”);
fileST.WriteLine(“内容Id:”);
fileST.WriteLine(“”);

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


bytes[]stringAsBytes=Encoding.Unicode.GetBytes(myString)

您可以对二进制数据使用Base 64编码另一个选项可能是只使用FileStream,然后手动将文本部分编码为byte[]writing@Alex-不幸的是,这不起作用(尽管我尝试过).我们的应用程序读入数据,并期望二进制字节数组出现。我正在编写一个工具来创建测试文件,但我不能影响读取文件的翻译代码。@Blorgbeard-这可能是一个选项。在与fs内联的字符串上是否可以使用类似于.ToByteArray的内容?是的,请参阅Zer0的回答OK,因此我有很多建议nes的编写方式是:“fileST.WriteLine(“+XMLdata[i,4].Insert(6,“-”).Insert(4,“-”+”);”,我尝试将Encoding.Unicode.GetBytes()包装在它们周围,并使用fileST.writealBytes更改为文件流,但实际上没有起作用(参数无效)。有没有一种方法可以在不将每一行转换为字符串的情况下进行包装?@JesseWilliams我不知道您从何处获得无效参数。您可以发布您在问题中尝试使用的代码吗?