我正在用VB.NET编写一个程序,它循环一个文件,里面有一些文件路径来执行操作。这个文件中的文件路径都在一行上,我循环遍历文件,如:
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
File.txt的内容是:
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()的字符串,那将非常感激:)
谢谢!
答案 0 :(得分:1)
您文件中的行可能没有正确终止vbCrLf 如果是这种情况,Split无法正确划分您的输入行,最终将整个文本传递给GetLastWriteTime。 您可以使用ReadAllLines而不是使用ReadAllText,并让工作将行拆分为知道如何处理文件换行符和回车代码的Framework。
For Each ThisLine In System.IO.File.ReadAllLines("C:\file.txt")
Dim FileModified As Date
FileModified = System.IO.File.GetLastWriteTime(ThisLine.Trim())
Next
还要在ThisLine变量中添加一个修剪,以删除行中错误添加的一些看不见的字符
答案 1 :(得分:0)
两个想法:
使用For
代替For Each
并确保您在第一次迭代时获得异常。如果没有,您可能会遇到一个特定文件路径的问题。如果是这种情况,请查看迭代变量值。
在十六进制编辑器中打开文件,确保每一行都正常终止。您可能在结尾处使用CR(10)或LF(13)字符,但在Windows中不能正常。