我遇到一个问题,我有2个GetFiles似乎无法找到任何文件。我已经评论了2个问题。我在sourcedir中有1个文件,在sourcedir的子文件夹中有1个文件。如果我取消FileIO.SearchOption.SearchAllSubDirectories,那么它将在sourcedir中找到该文件,但不会在子文件夹中找到该文件。使用FileIO.SearchOption.SearchAllSubDirectories,它根本找不到任何文件。我正在运行VS2013作为管理员。
'For some reason, this finds no files--> '
Dim xFilesCount = System.IO.Directory.GetFiles(sourcedir, FileIO.SearchOption.SearchAllSubDirectories).Length
Dim xFilesTransferred As Integer = 0
'For some reason, this finds no files'
For Each xFiles In System.IO.Directory.GetFiles(sourcedir, FileIO.SearchOption.SearchAllSubDirectories)
System.IO.File.Move(xFiles, xNewLocation & "\" & System.IO.Path.GetFileName(xFiles))
xFilesTransferred += 1
编辑:
非常感谢!我最终使用了以下代码,以防其他人遇到同样的问题。
Dim xFilesCount = System.IO.Directory.GetFiles(sourcedir, "*.pf_import", System.IO.SearchOption.AllDirectories).Length
Dim xFilesTransferred As Integer = 0
For Each xFiles In System.IO.Directory.GetFiles(sourcedir, "*.pf_import", System.IO.SearchOption.AllDirectories)
System.IO.File.Move(xFiles, xNewLocation & "\" & System.IO.Path.GetFileName(xFiles))
xFilesTransferred += 1
ProgressBar1.Value = xFilesTransferred * 100 / xFilesCount
ProgressBar1.Update()
Application.DoEvents()
Next
答案 0 :(得分:2)
使用
System.IO.Directory.GetFiles(sourcedir, "*", System.IO.SearchOption.AllDirectories)
目前你缺少一个参数。
GetFiles(String, String, SearchOption)
重要:强>
请将Option Strict On
作为代码模块的第一行。这有助于您避免这些错误。理想情况下,在项目选项中设置Option Strict On
,以便将其应用于所有文件。切勿在没有Option Explicit On
和Option Strict On
的情况下处理大型项目。 (我还建议Option Infer Off
。)
使用GetFiles()的正确常量是
System.IO.SearchOption.AllDirectories
而不是
FileIO.SearchOption.SearchAllSubDirectories
快乐的编码!
答案 1 :(得分:1)
您没有指定sourcedir的位置 - 但如果它是根目录,您将使用SearchOption.AllDirectories快速崩溃到特殊文件夹(我的文档,我的音乐等)。
如果是这种情况,你应该看到" unauthorizedAccessException" (很大程度上是因为这些目录实际上并不存在),你需要抓住这些目录才能继续使用其他非特殊的"文件夹。然后,您可以重新访问这些文件夹(例如MyDocuments),如:
Dim myPath As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments.ToString
(这将返回类似:c:\ users \ cptnvic \ documents)
然后,像:
For Each foundFile As String In My.Computer.FileSystem.GetDirectories(myPath, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
将返回要递归的文件夹列表。您只需将这些文件夹附加到myPath。此方法不需要任何管理更改(对于当前用户)。
祝你好运!