我正在尝试将 XML 文件从服务器中的文件夹移动到另一台服务器。当 xml 被移动时,它在字母之间出现空值。 (示例:<[null]F[null]o[...]r[...]m[...]\n> != '<'form'\'>)('引用说明')
这是我的场景。我有一个 WebService
可以将 XML 文件传输到我的服务器 SA 中的文件夹“received”。我在另一台服务器上也有一个 Windows 服务,用于检查新文件是否转到文件夹“已接收”,该服务将文件从服务器 SA 中的文件夹 A 移动到服务器 SA 中的文件夹“已处理”。为了将文件移动到文件夹“已处理”,此服务必须使用 WCF 服务将该 xml 传输到服务器 SB 中的文件夹 C。
服务器 SA 中的文件在字母之间没有空值,但我不知道为什么它在我的 SB 服务器中有它。
这是我用来移动文件的代码。
Dim fs As New FileStream(Path.Combine(sourcepath, NombreEncuesta), FileMode.Open)
Dim archivo(fs.Length) As Byte
fs.Read(archivo, 0, archivo.Length)
sb.FileSend = archivo
fs.Close()
最佳答案
我解决了我的问题。问题不在于打开和读取服务器中的字节。问题出在文件的来源中(在转到“收到的文件夹”之前)。
当我写入文件字节时出现问题,我正在使用 This 读取和写入文件字节。方法,然后将文件移动到文件夹“已接收”。该方法为字符串的每个字节提供了一个空字节。
Byte[] MyBytes = GetBytes(MyDataSet.GetXml())
// MyBytes == {[F], 0 , [O] , 0 , [R] , 0 , [M]}
也许我得到那个答案是因为 Tim S. Said。 GetBytes 方法可能正在读取不同编码的字符串。
MyDataSet.GetXml()
方法为您提供没有编码的 Xml 文本 {<}?xml version="1.0"encoding="utf-8"?>(取下制动器)。因此,当我决定删除零字节时,我无法使用 DataSet.ReadXml ()
当我发现这些错误时,我决定改变读取文件字节的方式。我没有使用 GetBytes(MyDataSet.GetXml())
,而是使用了这个函数。
public byte[] GetBytesFromFile(string FilePath)
{
FileStream Reader = null;;
byte[] bts = null ;
try
{
Reader = new FileStream(FilePath, FileMode.Open);
bts = new byte[Reader.Length];
Reader.Read(bts, 0, (int)Reader.Length);
Reader.Close();
}
catch (Exception ex)
{
bts = null;
}
finally
{
if (Reader != null)
Reader.Close();
}
return bts;
}
为什么我决定不使用 GetXml() 方法?因为当我读取生成的字节时,我正在编写一个没有编码的 XML。
感谢 Tim S. 的想法。
关于xml - 将 xml 从一个文件夹移动到另一个文件夹时出错。字母之间为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640717/