在文件路径中存在非法字符问题

时间:2014-12-20 11:35:37

标签: vb.net

我正在用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()的字符串,那将非常感激:)

谢谢!

2 个答案:

答案 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)

两个想法:

  1. 使用For代替For Each并确保您在第一次迭代时获得异常。如果没有,您可能会遇到一个特定文件路径的问题。如果是这种情况,请查看迭代变量值。

  2. 在十六进制编辑器中打开文件,确保每一行都正常终止。您可能在结尾处使用CR(10)或LF(13)字符,但在Windows中不能正常。