0

PC 上のすべてのムービーをアルファベットの各文字のサブフォルダに分類するためのコードをいくつか作成しました (たとえば、「例」は、文字「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
4

2 に答える 2

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
于 2013-09-21T13:01:15.670 に答える