1

現在、スクリーンショットを撮ってローカルマシンに保存し、後でネットワークドライブにコピーしようとしています。

Q:\ 1234567890123456789012345 \ 123456789012 \ 12345 \ Screenshots \ sc.jpg

^何人のキャラクターが話していたかについてのアイデア。その後、「12345」の後にスクリーンショットフォルダを作成するように設定しました。プログラムがポイントに達すると、このエラーが発生します。

ここに画像の説明を入力してください

どうすればこれを回避できますか?

また:

DirectoryInfo scdestinfo = new DirectoryInfo(scdest);
DirectoryInfo scinfo = new DirectoryInfo(sccpath);
CopyAll(scinfo, scdestinfo);

これが、フォルダ/ファイルをコピーするための私のコードです。

public void CopyAll(DirectoryInfo source, DirectoryInfo target)
    {
        copyall = false;
        try
        {
            //check if the target directory exists
            if (Directory.Exists(target.FullName) == false)
            {
                Directory.CreateDirectory(target.FullName);
            }//end if
            //copy all the files into the new directory
            foreach (FileInfo fi in source.GetFiles())
            {
                fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
            }//end foreach
            //copy all the sub directories using recursion
            foreach (DirectoryInfo diSourceDir in source.GetDirectories())
            {
                DirectoryInfo nextTargetDir = target.CreateSubdirectory(diSourceDir.Name);
                CopyAll(diSourceDir, nextTargetDir);
            }//end foreach
            //success here
            copyall = true;    
        }//end try
        catch (IOException ie)
        {
            MessageBox.Show(ie.Message);
            //handle it here
            copyall = false;
        }//end catch
    }//end CopyAll

そして、copyall関数。

4

2 に答える 2

2

残念ながら、これを回避する簡単な方法はありません。

解決策1:最も自然な方法:その制限を超えない方法でパスを生成します(ディレクトリ名とファイル名を短くします)。または、可能であれば、ディレクトリレイアウトを再編成します。

Solution2:これ(wired、imo)は好きではありませんが、 PathTooLongExceptionの.NET 2.0回避策(2.0の場合ですが、現在は有効です)のWindowsAPIように、この場合は失敗しません。

解決策3。データをファイルに読み書きする場合は、OSカーソルをそのディレクトリに移動してください。アクセスするために完全(260以上)を指定する必要はなく、ファイル名だけを指定する必要がありますこれを試して、うまくいくかどうかを確認する必要があります。(これが機能する場合でも、最初の解決策をお勧めしますが、試す価値があります)

お役に立てれば。

于 2012-04-13T17:58:29.570 に答える
2

これはWindowsの制限ですが、多くのAPI関数のUnicodeバリアントがあり、最大パス長を約32,767文字にすることができます。ただし、これも、処理する特定のファイルシステムによって制限されます。通常、特定のパスコンポーネントは255文字に制限されています(特定のボリュームの特定の制限については、GetVolumeInformationを確認してください)。

より長いパスを可能にするUnicodeバリアント(CreateFileWなど)を使用するには、.Netライブラリ関数を使用するのではなく、WindowsAPIを直接処理する必要があると思います。

于 2012-04-13T17:58:36.063 に答える