2012-05-03 15 views
2

投稿全体が適切であるため、記事全体をお読みください。Windows 7の場合、フォルダが存在しないと主張しています

私はこのC#のコードを書いた:

static void DumpDir(string dir) 
{ 
    string[] subdirs = Directory.GetDirectories(dir); 
    foreach (string subdir in subdirs) 
    { 
     DumpDir(subdir); 
    } 

    string[] files = Directory.GetFiles(dir); 

} 

static void Main(string[] args) 
{ 
    string startdir = @"G:\multimedia_dump"; 
    dirindexstart = startdir.Split('\\').Length; 
    string[] dirs = Directory.GetDirectories(startdir); 

    foreach (string dir in dirs) 
    { 
     DumpDir(dir); 
    } 
} 

それはハードコーディングされたディレクトリを開き、再帰的にそのすべてのサブディレクトリをループ。それはすべてです。それでおしまい。

しかし、特定のフォルダにそれエラー:これは最初のディレクトリではありませんどのように

The Error

注意してください。コードに従うと、Directory.GetDirectories()呼び出しの1つから論理的に派生する必要があることに注意してください。このフォルダ名はあまり生成されませんでした。本物だ。

だけでなく、それは本当ですが、私はエクスプローラのGUIでそれにナビゲートすることができます

GUI Lets Me Navigate There

を奇妙なことに、あなたがCMDのフォルダに移動した場合、それはDIRに表示されますが、フォルダ名の候補が表示されるまでTabキーを押しても、そのフォルダにCDを入れることはできません。私は3番目のリンクを掲示するだろうが、私は新しいので、このことは私をさせません。

何がありますか?私は、このフォルダを生成したソフトウェアは、何らかの低レベルのNTFS呼び出しを使用していると思います。これらのフォルダ名をプログラムで殺菌するか、このエラーを回避する方法がありますので、存在していてもいけないはずのフォルダにアクセスできますか?

+0

フォルダ名に '|'はありますか? – CodesInChaos

+0

私はそれがカーソルだと思って、ディレクトリ名はスペースで終わった。 –

答えて

1

あなたのパスには|が含まれているようです。通常のWin32 APIに関する限り、これは不正な文字ですが、NT APIに関してはそうではありません。

あなたは\\?\にパスを付けることによって(例えば〜260文字の最大パス長を)いくつかのWin32パスの制限を無効にすることができますが、これは|が含まれていないように見えます。

これに対処するには、おそらくNT APIsに下がる必要があります。

1

ディレクトリ名の最後にスペースがありますか?エクスプローラのあなたのショットの中にあるように見えます。私はそれが許可されているとは思わない、おそらくいくつかのツールは、空白をトリミングされ、それはあなたの不一致の原因です。

+0

はい、私はそれが最後のスペースだと思います。最初のエラーメッセージを見てください。スペースは整えられています – Steve

0

名前を消毒するソリューションが見つかりましたが、編集する前にこれを行う必要があります。ファイルのROBOCOPYを使用すると、ファイル名とフォルダ名から不正な文字が削除されます。

関連する問題