C# 代码中的 PathTooLongException

发布于 2024-07-25 19:10:09 字数 969 浏览 9 评论 0原文

我有以下代码:

 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 个字符...如何解决此问题?

i have the following code:

 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");


        }

I keep hitting a PathTooLongException error with the following line:

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

The application drills into a drive and finds all files/folders w/in the drive. I cannot change this path but since it is above 260 characters...how to work around this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ˇ宁静的妩媚 2024-08-01 19:10:10

正如微软所说这里, Windows 限制为 260 个字符。

您可以尝试使用符号链接(不确定...)。

As Microsoft says here, there is a Windows limitation on 260 characters.

You can try to avoid this with a symbolic link (not sure...).

慕烟庭风 2024-08-01 19:10:10

.NET 不支持 Unicode 文件路径,因此我知道在这种情况下唯一的选择是使用 P/Invoke(当然,除非您可以更改路径)来调用支持它们的 Win32 API 函数。 您可以在此处查看说明关于如何使用 Unicode 文件路径来打破 260 个字符的障碍。

.NET doesn't support Unicode file paths, so the only option I know of in this case is using P/Invoke (unless, of course, you can change the path) to call Win32 API functions that do support them. You can look here for instructions on how to use Unicode file path to break the 260 characters barrier.

萌辣 2024-08-01 19:10:09

具有完整路径的 GetLastAccessTime() 调用可以 超出完全限定文件路径最大长度的内部限制(特定于操作系统版本,但通常为 260 个字符)。

避免这种情况的一种方法是使用 Directory.SetCurrentDirectory() 更改当前系统目录,然后仅使用相对路径调用 GetLastAccessTime()。 只需确保将当前目录更改回起始目录即可,以避免出现意外问题。

The GetLastAccessTime() call, with a full path can exceed the internal limit (which is OS-version specific, but typically 260 characters) on the maximum length for a fully qualified file path.

One way to avoid this, is to use Directory.SetCurrentDirectory() to change the current system directory and then call GetLastAccessTime() with only a relative path. Just make sure you change your current directory back to what you started from to avoid unexpected issues.

梦一生花开无言 2024-08-01 19:10:09

像 Delimon.Win32.IO.FileInfo 的 .LastAccessTime 属性之类的东西可能会起作用。

Delimon 是 Microsoft TechNet 上的一个用于克服长文件名问题的库,它称为 Delimon.Win32.IO 库 (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 个字符)。 通常你会遇到
System.IO.PathTooLongException 标准 .NET 库错误。

Something like the .LastAccessTime property of Delimon.Win32.IO.FileInfo, might do the trick.

Delimon is a library on Microsoft TechNet for overcoming the long filenames problem, it's called Delimon.Win32.I​O Library (V4.0) and it has its own versions of key classes from System.IO

For example, you would replace:

System.IO.Directory.GetFiles 

with

Delimon.Win32.IO.Directory.GetFiles

which will let you handle long files and folders.

From the website:

Delimon.Win32.IO replaces basic file functions of System.IO and
supports File & Folder names up to up to 32,767 Characters.

This Library is written on .NET Framework 4.0 and can be used either
on x86 & x64 systems. The File & Folder limitations of the standard
System.IO namespace can work with files that have 260 characters in a
filename and 240 characters in a folder name (MAX_PATH is usually
configured as 260 characters). Typically you run into the
System.IO.PathTooLongException Error with the Standard .NET Library.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文