System.IO.Directory.GetFiles找不到任何文件

时间:2015-09-23 21:01:36

标签: vb.net

-->

我遇到一个问题,我有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

2 个答案:

答案 0 :(得分:2)

使用

System.IO.Directory.GetFiles(sourcedir, "*", System.IO.SearchOption.AllDirectories)

问题#1

目前你缺少一个参数。

因为GetFiles() signature是:

GetFiles(String, String, SearchOption)
 

重要:

请将Option Strict On作为代码模块的第一行。这有助于您避免这些错误。理想情况下,在项目选项中设置Option Strict On,以便将其应用于所有文件。切勿在没有Option Explicit OnOption Strict On的情况下处理大型项目。 (我还建议Option Infer Off。)

问题#2

使用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。此方法不需要任何管理更改(对于当前用户)。

祝你好运!