2013-05-16 67 views
1

我在VB.NET中使用「FilePutObject」編寫了以下代碼,以便在VB.NET中編寫文件。FileSystem FilePutobject Issues

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

+1

不回答你的問題,但你有沒有考慮過用更現代的方法System.IO.WriteAllText? – N0Alias

+2

FilePutObject是舊版vb代碼的結轉。您應該只在將舊代碼移植到.net時使用它。不要將它用於新的開發。 –

回答

3

這是正常行爲。您正在將對象輸出到二進制文件 - 這不會生成純文本文件,如果您想要生成文本文件(或者真的是用於新開發),則不是正確的工具。

在這種情況下,「垃圾」字符屬於目標文件中的字符串描述符。在你的情況下,這些前四個字節可以通過查看寫入文件中的原始值可以最好地理解:

hex edit view

前兩個字節描述變量類型(參見:VarType) - 00 08這裏vbString。接下來的兩個字符串的長度爲00 0e或14,因爲字符串中有14個字符。

他們是到位,使從文件中讀出多個對象,當讀功能可以識別每個對象的類型和尺寸,使得它知道多少閱讀和在哪裏停止在到達下一個對象之前。

如果要編寫文本文件,請考慮使用StreamWriter

例如:

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

解決方案是什麼?因爲它被建議使用FilePutObject,因爲FilePut是無效的。 – user1672097

+0

@ user1672097 - 考慮使用StreamWriter(通過示例鏈接回答MSDN)。 –

+0

我可以理解08爲Vartype和0e爲14.那麼爲什麼兩個額外的00? – user1672097