2014-12-20 31 views
2

我正在VB.NET中編寫一個程序,該程序通過文件循環通過一個文件路徑來執行操作。在這個文件中的文件路徑是每個上線,我通過像文件循環:FILE.TXT的在文件路徑中存在非法字符的問題

Dim FileContents As String 
FileContents = System.IO.File.ReadAllText("C:\File.txt") 

Dim FileSplit As String() 
FileSplit = FileContents.Split(vbCrLf) 

For Each ThisLine In FileSplit 

    Dim FileModified As Date 
    FileModified = System.IO.File.GetLastWriteTime(ThisLine) 

    'Do something here 

Next 

內容是:

Y:\Users\localadmin\Desktop\MakeShadowCopy\FileInfo.vb 
Y:\Users\localadmin\Desktop\MakeShadowCopy\FindFiles.vb 
Y:\Users\localadmin\Desktop\MakeShadowCopy\MakeShadowCopy.sln 
Y:\Users\localadmin\Desktop\MakeShadowCopy\MakeShadowCopy.v12.suo 

迴路工作正常,但它在GetLastWriteTime()方法上拋出一個異常,表示該路徑包含非法字符,但它只是一個包含文件路徑的普通字符串。

如果任何人有任何想法,也不知道如何逃避串進入GetLastWriteTime(),將不勝感激:)

謝謝!

+1

'C:\ File.txt'的內容? –

+0

你能夠手動打開該文件嗎? – Steve

+0

已經發布了File.txt的內容 –

回答

1

可能是文件中的行不正確vbCrLf終止。
如果出現這種情況,Split將無法正確劃分您的輸入內容,並最終將整個文本傳遞給GetLastWriteTime。 而不是使用ReadAllText,你可以使用ReadAllLines,讓工作分割行知道如何處理文件行中斷和回車代碼的框架。

For Each ThisLine In System.IO.File.ReadAllLines("C:\file.txt") 
    Dim FileModified As Date 
    FileModified = System.IO.File.GetLastWriteTime(ThisLine.Trim()) 
Next 

同時添加修剪到ThisLine變量刪除一些看不見的字符添加erroneusly到線

+0

感謝大家,這只是我處理換行的方式。所有工作現在:) –

0

兩個想法:

  1. 使用For代替For Each,並確保你在第一次迭代中得到例外。如果不是,您可能會遇到一個特定文件路徑的問題。如果是這種情況,請檢查迭代變量值。

  2. 在十六進制編輯器中打開文件,並確保每一行都正常終止。您可能在結尾處具有CR(10)或LF(13)字符,但在Windows中不能像正常一樣。