2013-08-18 116 views
0

我正在嘗試寫入一個文本文件這個作品接受它似乎每次覆蓋最後一行。我希望它寫入下一行而不是覆蓋。下面是我使用Writeline覆蓋最後一行

Dim FileNumber As Integer = FreeFile() 
FileOpen(FileNumber, "c:\Converted.txt", OpenMode.Output) 
PrintLine(FileNumber, convertedDir) 
FileClose(FileNumber) 
+0

使用OpenMode.Append來追加而不是覆蓋。 –

回答

1

您使用的是舊(VB6/VBA)代碼的代碼,更好地使用.NET StreamWriter

Dim append As Boolean = True 
Using writer As System.IO.StreamWriter = New System.IO.StreamWriter("c:\Converted.txt", append) 
    writer.WriteLine(convertedDir) 
End Using 

append指示給定文件是否應附加。儘管如此,正如Boris B所建議的那樣,您可以將此變量始終設置爲True,因爲StreamWriter能夠自動處理這兩種情況(現有文件或沒有)。

在任何情況下,我包括下面的「理論上正確」的方式來處理StreamWriter(通過改變append property根據的事實,給定的文件存在與否):

Dim append As Boolean = False 
Dim fileName As String = "c:\Converted.txt" 
If (System.IO.File.Exists(fileName)) Then 
    append = True 
End If 
Using writer As System.IO.StreamWriter = New System.IO.StreamWriter(fileName, append) 
    writer.WriteLine(convertedDir) 'Writes to a new line 
End Using 
+0

感謝您的更新。我剛剛嘗試過這些代碼。它仍然覆蓋最後一行。之前的代碼是將文件夾目錄複製到新位置。我希望它會將轉換後的導演作爲新行寫入,以便創建所創建文件夾的日誌。目前它只是將最後一個文件夾寫入轉換文本文件 – user2693561

+0

@ user2693561此代碼每次都會寫入一個新行。如果文件c:\ Converted.txt不存在,它會創建它並寫入第一行。如果此文件已存在,則應將append標誌設置爲true,並將繼續寫入新行。我現在將更新我的代碼,以確保您正確使用它。 – varocarbas

+0

@ user2693561請測試我包含的新代碼並確認它每次寫入一個新行。 – varocarbas

1

對於基於現有的代碼變化快速的解決方案行

FileOpen(FileNumber, "c:\Converted.txt", OpenMode.Output) 

FileOpen(FileNumber, "c:\Converted.txt", OpenMode.Append) 

但是,你應該真的更新你的寫文件的方法,因爲FileOpen和類似的文件只是爲了兼容舊的VB VDB程序(和程序員:)。對於更現代的解決方案,請查看varocarbas的答案。

+0

你的回答是不完整的:你假定文件在那裏,而不讓OP知道這是必需的。另外我不認爲你應該支持對舊代碼的依賴。 – varocarbas

+0

@varocarbas:不,我不假設任何東西。帶有OpenMode.Append的'FileOpen'會創建文件,如果文件不存在,文件的存在並不重要。至於依賴舊代碼,至少可以說是值得商榷的。 OP已經顯示了他現有的代碼並詢問它有什麼問題,我只是以他自己的方式提供了答案。如果他問過「我怎麼能......」或「什麼是最好的方法......」,那麼我可能會用'My.Computer.FileSystem.WriteAllText'去。 –

+0

(我從未使用過VB.NET中的FileOpen,只是假定它按照建議工作)。你在回答OP期望的問題上是正確的(這就是爲什麼我的+1),儘管我確實認爲當有人使用這麼舊的代碼時,最好的辦法是告訴他更新的,適應性更強的選擇。 – varocarbas