2

投稿全体が関連しているので、投稿全体をお読みください。

私はこの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);
    }
}

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

ただし、特定のフォルダでエラーが発生します。

エラー

これが初期ディレクトリではないことに注意してください。コードに従う場合は、Directory.GetDirectories()呼び出しの1つから論理的に派生する必要があることに注意してください。このフォルダ名は適切に生成されていません。本物だ。

それは本物であるだけでなく、エクスプローラーのGUIでナビゲートできます。

GUIでナビゲートできます

奇妙なことに、CMDでフォルダーに移動すると、DIRに表示されますが、フォルダー名の候補が表示されるまでTabキーを押すと、CDを挿入できません。3つ目のリンクを投稿しますが、私は新しいので、これでは許可されません。

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

4

3 に答える 3

1

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

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

したがって、これに対処するには、おそらくNTAPIにドロップダウンする必要があります

于 2012-05-03T20:30:01.923 に答える
1

そのディレクトリ名の最後にスペースはありますか?エクスプローラーのショットにあるようです。私はそれが許可されていないと思います、いくつかのツールはおそらく空白をトリミングしています、そしてそれがあなたのミスマッチを引き起こしているものです。

于 2012-05-03T20:23:42.593 に答える
0

名前をサニタイズするために機能する解決策を見つけましたが、編集する前にこれを行う必要があります。ファイルのROBOCOPYを使用すると、ファイル名とフォルダー名から不正な文字が削除されます。

于 2013-07-03T18:08:18.597 に答える