Vb.net 文件系统FilePutobject问题

Vb.net 文件系统FilePutobject问题,vb.net,Vb.net,为了在VB.NET中编写文件,我在VB.NET中使用“FilePutObject”编写了以下代码 Dim str = "This is a Test" FileSystem.FileOpen(1, "c:\temp\file1.txt", OpenMode.Binary) FileSystem.FilePutObject(1, str, 2) FileSystem.FileClose(1) 当我检查文件时,我发现在文本之前添加了一些垃圾字符 然后我使用“FilePut”来编写文件: Dim s

为了在VB.NET中编写文件,我在VB.NET中使用“FilePutObject”编写了以下代码

Dim str = "This is a Test"
FileSystem.FileOpen(1, "c:\temp\file1.txt", OpenMode.Binary)
FileSystem.FilePutObject(1, str, 2)
FileSystem.FileClose(1)
当我检查文件时,我发现在文本之前添加了一些垃圾字符

然后我使用“FilePut”来编写文件:

Dim str = "This is a Test"
FileSystem.FileOpen(1, "c:\temp\file1.txt", OpenMode.Binary)
FileSystem.FilePut(1, str, 2)
FileSystem.FileClose(1)

使用FilePut时,文件中的文本书写得非常完美。这背后的原因可能是什么?另外,我发现*FilePut已经过时,应该改用FilePutObject。如何使用FilePutObject正确写入

这是正常行为。您正在将对象输出到二进制文件-这不是生成纯文本文件,如果您想要生成文本文件(或用于新开发),则
FilePutObject
不是正确的工具

在这种情况下,“垃圾”字符属于对象文件中的字符串描述符。通过查看写入文件的原始值,可以最好地理解案例中的前四个字节:

前两个字节描述变量类型(请参见:)-
00 08
,此处为
vbString
。接下来的两个给出字符串长度,
000e
或14,因为字符串中有14个字符

它们位于适当的位置,以便在从文件中读取多个对象时,读取功能可以识别每个对象的类型和大小,以便在到达下一个对象之前知道要读取多少以及在何处停止

如果要编写文本文件,请考虑使用.< /P> 例如:

Dim str as String = "This is a Test"
Using sw As StreamWriter = New StreamWriter("c:\temp\file1.txt")
        sw.WriteLine(str)
End Using 

这是正常的行为。您正在将对象输出到二进制文件-这不是生成纯文本文件,如果您想要生成文本文件(或用于新开发),则
FilePutObject
不是正确的工具

在这种情况下,“垃圾”字符属于对象文件中的字符串描述符。通过查看写入文件的原始值,可以最好地理解案例中的前四个字节:

前两个字节描述变量类型(请参见:)-
00 08
,此处为
vbString
。接下来的两个给出字符串长度,
000e
或14,因为字符串中有14个字符

它们位于适当的位置,以便在从文件中读取多个对象时,读取功能可以识别每个对象的类型和大小,以便在到达下一个对象之前知道要读取多少以及在何处停止

如果要编写文本文件,请考虑使用.< /P> 例如:

Dim str as String = "This is a Test"
Using sw As StreamWriter = New StreamWriter("c:\temp\file1.txt")
        sw.WriteLine(str)
End Using 

这不是对您问题的回答,但您是否考虑过使用更现代的System.IO.WriteAllText方法?FilePutObject是旧vb代码的继承。您应该只在将旧代码移植到.net时使用它。不要将其用于新开发。这不是对您问题的回答,但您是否考虑过使用更现代的System.IO.WriteAllText方法?FilePutObject是旧vb代码的继承。您应该只在将旧代码移植到.net时使用它。不要将其用于新开发。解决方案是什么?正如建议使用FielePutObjor作为FielPoT无效。@ USE1672097—考虑使用流写器(与MSDN连接的例子)。对于Vartype和0E,我可以理解08。14,为什么另外两个00?@ USE1672097——额外的零点不是额外的,它们只是不需要更小的数字。例如,字符串的长度可以超过255个字符,因此需要额外的字节来适应其长度。vartype也可以大于255(即:vbArray=8192=x2000),因此格式需要空间来容纳所有大小的对象。那么FilePut是否可以写入?我认为根本原因是我试图以二进制模式编写txt文件?解决方案是什么?正如建议使用FielePutObjor作为FielPoT无效。@ USE1672097—考虑使用流写器(与MSDN连接的例子)。对于Vartype和0E,我可以理解08。14,为什么另外两个00?@ USE1672097——额外的零点不是额外的,它们只是不需要更小的数字。例如,字符串的长度可以超过255个字符,因此需要额外的字节来适应其长度。vartype也可以大于255(即:vbArray=8192=x2000),因此格式需要空间来容纳所有大小的对象。那么FilePut是否可以写入?我认为根本原因是我试图以二进制模式编写txt文件?