Directory.Move没有尝试正确的文件夹

时间:2013-09-21 12:06:13

标签: vb.net directory move .net

我已经制作了一些代码,用于将我电脑上的所有电影分类为字母表中每个字母的子文件夹(例如“一个示例”将放在一个子文件夹中,该子文件夹只包含以字母“A”开头的电影。

我写的代码看起来像我应该没有问题,虽然由于某种原因这段代码:

'Declarations
System.IO.Directory.CreateDirectory("D:\Vuze Downloads\Movies\.CAMS")
System.IO.Directory.CreateDirectory("D:\Vuze Downloads\Movies\.TS")
Dim TS As String = "D:\Vuze Downloads\Movies\.TS\"
Dim CAM As String = "D:\Vuze Downloads\Movies\.CAMS\"
Dim mainFolder As New System.IO.DirectoryInfo("D:\Vuze Downloads\Movies\")

For Each f As System.IO.DirectoryInfo In mainFolder.GetDirectories()
    If Not UCase(f.ToString).Contains("(CAM)") And UCase(f.ToString).Contains("(TS)") Then
        System.IO.Directory.Move(f.ToString, mainFolder.Name & UCase(Left(f.Name, 1)) & "\" & f.Name)
    ElseIf UCase(f.Name.ToString).Contains("(CAM)") And Not UCase(f.Name.ToString).Contains("(TS)") Then
        System.IO.Directory.Move(f.ToString, CAM.ToString & UCase(Mid(f.Name, 5)) & "\" & f.Name.Substring(5))
    ElseIf UCase(f.Name.ToString).Contains("(TS)") And Not UCase(f.Name.ToString).Contains("(CAM)") Then
        System.IO.Directory.Move(f.ToString, TS.ToString & UCase(Mid(f.Name, 6)) & "\" & f.Name.Substring(6))
    End If
Next

在这一行继续抛出异常:

System.IO.Directory.Move(f.ToString, CAM.ToString & UCase(Mid(f.Name, 5)) & "\" & f.Name.Substring(5))

这是一个例外:

An unhandled exception of type 'System.IO.DirectoryNotFoundException' occurred in
 mscorlib.dll

Additional information: Could not find a part of the path 
'D:\Users\Yorrick\documents\visual studio 2012\Projects\filmsort\filmsort\bin\Debug\(CAM)The Internship'.

如上述声明所示,我不知道此代码试图访问该文件夹的方式或原因。

如果有人可以看一眼,并希望发现我所犯的错误,那将非常感激。

编辑:

解决了上述问题,我遇到了一个新问题。 使用下面的代码,我现在得到相同的例外,除了这次额外的信息说“无法找到路径的一部分”。在调试时我的所有变量似乎都是正确的,所以我真的不明白为什么这不起作用。

注意:注释行是我尝试过的,它给了我System.IO.IOException: Cannot create a file when that file already exists.

代码:

System.IO.Directory.CreateDirectory("D:\Vuze Downloads\Movies\.CAMS")
System.IO.Directory.CreateDirectory("D:\Vuze Downloads\Movies\.TS")
Dim TS As String = "D:\Vuze Downloads\Movies\.TS\"
Dim CAM As String = "D:\Vuze Downloads\Movies\.CAMS\"
Dim mainFolder As New System.IO.DirectoryInfo("D:\Vuze Downloads\Movies\")

For Each f As System.IO.DirectoryInfo In mainFolder.GetDirectories()
    If Not UCase(f.ToString).Contains("(CAM)") And UCase(f.ToString).Contains("(TS)") Then
        System.IO.Directory.Move(f.FullName, mainFolder.FullName & UCase(Left(f.Name, 1)) & "\" & f.Name)
    ElseIf UCase(f.Name.ToString).Contains("(CAM)") And Not UCase(f.Name.ToString).Contains("(TS)") Then
        'System.IO.Directory.CreateDirectory(CAM & UCase(Mid(f.Name, 6)) & "\" & f.Name.Substring(6))
        System.IO.Directory.Move(f.FullName, CAM & UCase(Mid(f.Name, 6)) & "\" & f.Name.Substring(6))
    ElseIf UCase(f.Name.ToString).Contains("(TS)") And Not UCase(f.Name.ToString).Contains("(CAM)") Then
        System.IO.Directory.Move(f.FullName, TS.ToString & UCase(Mid(f.Name, 5)) & "\" & f.Name.Substring(5))
    End If
Next

2 个答案:

答案 0 :(得分:1)

如果未指定完整路径名称(如“c:\ foo \ bar”),而是指定相对路径名称(如“bar”),则会发生这种情况。通过预先添加Environment.CurrentDirectory将相对路径名称转换为完整路径名称。默认情况下,它是项目的构建目录。

这是因为您使用了DirectoryInfo.Name。对于路径为c:\ foo \ bar的目录,这是“bar”。您必须改为使用FullName属性。

答案 1 :(得分:0)

我只是重写了一下,我认为这应该足以达到你的目的。

System.IO.Directory.CreateDirectory("D:\Vuze Downloads\Movies\.CAMS")
System.IO.Directory.CreateDirectory("D:\Vuze Downloads\Movies\.TS")
Dim TS As String = "D:\Vuze Downloads\Movies\.TS\"
Dim CAM As String = "D:\Vuze Downloads\Movies\.CAMS\"
Dim mainFolder As New System.IO.DirectoryInfo("D:\Vuze Downloads\Movies\")

For Each f As System.IO.DirectoryInfo In mainFolder.GetDirectories()
    If f.Name.ToUpper.Contains("(TS)") Then
        System.IO.Directory.Move(f.FullName, System.IO.Path.Combine(TS, f.Name))
    ElseIf f.Name.ToUpper.Contains("(CAM)") Then
        System.IO.Directory.Move(f.FullName, System.IO.Path.Combine(CAM, f.Name))
    End If
Next