相关疑难解决方法(0)

如何避免System.IO.PathTooLongException?

我们经常遇到这个问题......

例:

如果我有一个文件,我想将它复制到另一个目录或UNC共享,如果路径的长度超过248(如果我没有记错),那么它会抛出PathTooLongException.这个问题有解决方法吗?

PS:是否有任何注册表设置将此路径设置为更长的字符集?

.net c#

55
推荐指数
3
解决办法
5万
查看次数

使用cmd.exe将长文件名转换为短文件名(8.3)

我试图在Windows上将长文件名转换为短文件名(8.3).

带有命令行参数的批处理文件按预期工作:

short.bat:

@echo OFF
echo %~s1
Run Code Online (Sandbox Code Playgroud)

调用short.bat C:\Documents and Settings\User\NTUSER.DAT返回C:\DOCUM~1\USER\NTUSER.DAT

但是,我不喜欢为此添加额外的.bat文件.我宁愿cmd.exe用ruby脚本调用整个命令.我怎样才能做到这一点?

作为中间步骤,我尝试对批处理文件中的路径进行硬编码,但这不起作用:

short1.bat:

@echo OFF
SET filename="C:\Documents and Settings\User\NTUSER.DAT"
echo %filename%
echo %~sfilename%
Run Code Online (Sandbox Code Playgroud)

echo %filename%有效,但echo %~sfilename%出现以下错误:

The following usage of the path operator in batch-parameter
substitution is invalid: %~sfilename%

For valid formats type CALL /? or FOR /?
Run Code Online (Sandbox Code Playgroud)

如果short1.bat工作,我如何将其转换为可以调用的单行cmd.exe \c ...

还有另一个问题(如何获取DOS路径而不是Windows路径),但是那个问题是专门询问当前目录的路径.

windows command-line batch-file long-filenames short-filenames

30
推荐指数
2
解决办法
7万
查看次数

DirectoryInfo,FileInfo和很长的路径

我尝试使用很长的路径使用DirectoryInfo,FileInfo.

  • 我尝试使用\\?\ c:\ long path(我使用fileInfo和DirectoryInfo获取非法的文件)
  • 我尝试使用file:// c:/ long path(我得到uri不支持)

我可以在路径或其他地方使用〜.

我读过这篇文章,但我想用另一种调用API的方式.是其他解决方案吗?

微软有一篇文章可供使用\\?在文件路径链接文本中

问题是如何使用非常长的路径,DirectoryInfo和FileInfo的路径谁更长的256 char

.net c# directoryinfo fileinfo pathtoolongexception

11
推荐指数
4
解决办法
2万
查看次数

C#如何在使用DirectoryInfo时解决限制?

当我递归一些文件夹和文件时,我遇到这个错误:

指定的路径,文件名或两者都太长.完全限定的文件名必须少于260个字符,目录名必须少于248个字符.

这是我的功能

private void ProcessDirectory(DirectoryInfo di)
{
    try
    {
        DirectoryInfo[] diArr = di.GetDirectories();

        foreach (DirectoryInfo directoryInfo in diArr)
        {
            if (StopCheck)
                    return;
            ProcessDirectory(directoryInfo);
        }
        ProcessFile(di);
    }
    catch (Exception e)
    {
        listBoxError.Items.Add(e.Message);
    }

    TextBoxCurrentFolder.Text = di.ToString();
}
Run Code Online (Sandbox Code Playgroud)

我不能让目录名更短,因为我不允许这样......我怎么能解决这个问题呢?

补充: 这是另一个功能:

private void ProcessFile(DirectoryInfo di)
{
    try
    {
        FileInfo[] fileInfo = di.GetFiles();

        if (fileInfo.LongLength != 0)
        {
            foreach (FileInfo info in fileInfo)
            {
                Size += info.Length;
                CountFile++;
            }
        }
    }
    catch (Exception e)
    {
        listBoxError.Items.Add(e.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

EDIT 在他使用Zeta Long Paths的地方找到了这个: …

.net c# directoryinfo

10
推荐指数
1
解决办法
1万
查看次数

有时解决FileSystemInfo.Fullname抛出的PathTooLongException的方法吗?

PathTooLongException当我访问对象的Fullname属性时,我的硬盘驱动器上有文件FileSystemInfo.有没有办法解决这个问题(不包括重命名不是一个选项的文件)?

其他答案提到的http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath建议在文件名上加上"\?\"前缀但在这种情况下DirectoryInfo.GetFileSystemInfos()是负责创建FileSystemInfo对象,DirectoryInfo不接受该前缀,因此无法使用它.

答案" C#代码中的PathTooLongException "没有帮助,因为这是一个多线程应用程序,我无法继续更改当前的应用程序路径.

我是否真的必须做所有事情PInvoke才能读取硬盘上的每个文件?

c# filesystems ntfs

9
推荐指数
2
解决办法
4733
查看次数