2

私は次のコードを持っています:

 public static void Serialize()
    {

        List<string> dirs = FileHelper.GetFilesRecursive(fileDirectoryPath);
        List<string> dirFiles = new List<string>();
        foreach (string p in dirs)
        {
            string path = p;

            string lastAccessTime = File.GetLastAccessTime(path).ToString();


            bool DirFile = File.Exists(path);
            FileInfo fInf = new FileInfo(path);
            long lengthInk = fInf.Length / 1024;

            DateTime lastWriteTime = File.GetLastWriteTime(p);
            dirFiles.Add(p + "|" + lastAccessTime.ToString() + "|" + DirFile.ToString() + "|" + lastWriteTime.ToString() + "|" + lengthInk.ToString() + " kb");


        }

次の行で PathTooLongException エラーが発生し続けます。

string lastAccessTime = File.GetLastAccessTime(path).ToString();

アプリケーションはドライブにドリルダウンし、ドライブ内のすべてのファイル/フォルダーを見つけます。このパスは変更できませんが、260 文字を超えているため、これを回避するにはどうすればよいですか?

4

4 に答える 4

4

完全パスを使用したGetLastAccessTime()呼び出しは、完全修飾ファイル パスの最大長の内部制限(OS バージョン固有ですが、通常は 260 文字) を超える可能性があります。

これを回避する 1 つの方法は、 を使用して現在のシステム ディレクトリを変更し、相対パスのみでDirectory.SetCurrentDirectory()呼び出すことです。GetLastAccessTime()予期しない問題を回避するために、現在のディレクトリを元のディレクトリに戻してください。

于 2009-07-06T15:27:06.847 に答える
2

.LastAccessTimeDelimon.Win32.IO.FileInfoのプロパティのようなものがうまくいくかもしれません。

Delimon は、長いファイル名の問題を解決するための Microsoft TechNet のライブラリであり、Delimon.Win32.I O ライブラリ (V4.0)と呼ばれ、System.IO の主要なクラスの独自のバージョンがあります。

たとえば、次のように置き換えます。

System.IO.Directory.GetFiles 

Delimon.Win32.IO.Directory.GetFiles

これにより、長いファイルとフォルダーを処理できます。

ウェブサイトから:

Delimon.Win32.IO は、System.IO の基本的なファイル機能を置き換え、最大 32,767 文字のファイルとフォルダ名をサポートします。

このライブラリは .NET Framework 4.0 で作成されており、x86 および x64 システムで使用できます。標準の System.IO 名前空間のファイルとフォルダーの制限は、ファイル名が 260 文字、フォルダー名が 240 文字のファイルで機能します (通常、MAX_PATH は 260 文字として構成されます)。通常、標準 .NET ライブラリで System.IO.PathTooLongException エラーが発生します。

于 2013-02-16T05:58:49.080 に答える
0

.NET は Unicode ファイル パスをサポートしていないため、この場合に私が知っている唯一のオプションは、P/Invoke を使用して (もちろん、パスを変更できる場合を除きます)、それらをサポートする Win32 API 関数を呼び出すことです。Unicode ファイル パスを使用して 260 文字の壁を破る方法については、こちらを参照してください。

于 2009-07-06T15:19:07.890 に答える
0

Microsoft がここで述べているように、Windows には 260 文字の制限があります。

シンボリックリンクを使用してこれを回避することができます(よくわかりません...)。

于 2009-07-06T15:21:18.543 に答える