我有两个字符串,每个字符串都是PDF礼仪,我必须将这两个礼仪写成PDF文件。为此,我将每个字符串转换为字节数组(我不知道这是否是最好的方法),每个我写入PDF文件。当我把一个礼仪写成PDF文件都很好的时候,我看到了礼仪,但后来我尝试追加第二个,结果是一样的,进入文件只是第一个礼仪。例如,这段代码写出了第一个礼仪和所有工作的好处:
Dim fs As FileStream = New FileStream(fullFileName, FileMode.CreateNew)
fs.Close()
fs = New FileStream(fullFileName, FileMode.Append)
Dim str As String = GetPDFString(27)
Dim binaryData As Byte() = ConvertStringToByte(str)
fs.Write(binaryData, 0, binaryData.Length)
fs.Close()
但如果我想使用此代码在同一个PDF文件中附加第二个礼节......这不会附加。
Dim fs As FileStream = New FileStream(fullFileName, FileMode.CreateNew)
fs.Close()
fs = New FileStream(fullFileName, FileMode.Append)
Dim str As String = GetPDFString(25)
Dim str1 As String = GetPDFString(27)
Dim binaryData As Byte() = ConvertStringToByte(str)
Dim binaryData1 As Byte() = ConvertStringToByte(str1)
fs.Write(binaryData, 0, binaryData.Length)
fs.Write(binaryData1, 0, binaryData1.Length)
fs.Close()
两者都有相同的结果,我不明白为什么第二个礼节没有附加?非常感谢你。
答案 0 :(得分:4)
您的问题标题表明您询问的是如何将字节附加到FileStream而不是PDF,而不是关于Base64字符串转换(您在代码中使用)。
在向StackOverflow提问之前,您需要确保一次只传达一个问题。删除所有不相关的内容,并准备一个我们可以在全新的VS项目中使用的代码示例,以便重现您的问题并帮助您解决它。
现在,如果您的问题实际上是关于将一个字节(或字节数组)附加到文件,它就像一行代码一样简单(如果保持FileStream方法,则为两行)。见以下链接:
此外,copy-pasted为了您的方便(以及从C#到VB.NET的converted):
Dim appendMe As Byte() = New Byte(999) {}
File.AppendAllBytes("C:\test.exe", appendMe)
或者,对于avoid memory overflow,如果您的字节数组预计足够大:
Public Shared Sub AppendAllBytes(path As String, bytes As Byte())
'argument-checking here.
Using stream = New FileStream(path, FileMode.Append)
stream.Write(bytes, 0, bytes.Length)
End Using
End Sub
答案 1 :(得分:2)
这一行:
fs.Write(binaryData1, binaryData.Length + 1, binaryData1.Length)
特别是第二个参数(binaryData.Length + 1
),你告诉它开始从binaryData1
的错误位置追加。例如,如果长度为3个字节,那么binaryData
也是如此,它不会附加任何内容。它应该类似于第一个.Write
行:
fs.Write(binaryData1, 0, binaryData1.Length)
因此它会附加 binaryData1
的所有。它仍会在 binaryData
之后附加 - 您无需在此行中指定前一binaryData
的长度。
或者,完全绕过上述内容,在编码/将它们写入文件之前连接两个字符串:
Dim fs As FileStream = New FileStream(fullFileName, FileMode.CreateNew)
fs.Close()
fs = New FileStream(fullFileName, FileMode.Append)
Dim str As String = GetPDFString(id, token, depot, 25)
Dim str1 As String = GetPDFString(id, token, depot, 27)
Dim binaryData As Byte() = Convert.FromBase64String(str & str1) 'concatenate strings
fs.Write(binaryData, 0, binaryData.Length)
fs.Close()