标签: long-filenames

如何将字符串添加到string []数组?没有.Add功能

private string[] ColeccionDeCortes(string Path)
{
    DirectoryInfo X = new DirectoryInfo(Path);
    FileInfo[] listaDeArchivos = X.GetFiles();
    string[] Coleccion;

    foreach (FileInfo FI in listaDeArchivos)
    {
        //Add the FI.Name to the Coleccion[] array, 
    }

    return Coleccion;
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换FI.Name为字符串,然后将其添加到我的数组中.我怎样才能做到这一点?

c# arrays long-filenames

205
推荐指数
6
解决办法
67万
查看次数

Windows 10中是否仍存在MAX_PATH问题

有人可以告诉我们/我,如果MAX_PATH问题仍然存在于Windows 10的(技术预览版)中.如果它存在:路径和单个文件名有多少个字符?

path limit long-filenames windows-10

75
推荐指数
2
解决办法
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万
查看次数

如何创建然后使用Perl的长Windows路径?

我有一个构建过程的一部分,在Windows中创建一个可怕的长路径.这不是我的错.这是几个目录深,没有一个目录名异常长; 它们只是很长很多,足以让它完成MAX_PATH(260个字符).我在这些名称中没有使用除ASCII以外的任何东西.

最大的问题是,在目标期间,爆炸发生在Module :: Build的内部深处dist,尽管我认为构建系统无关紧要,因为它们会创建相同的目录.

创建其中一个过长的目录File::Path失败:

 use File::Path qw( make_path );

 make_path( 'C:\\.....' ); # fails if path is over 260 chars
Run Code Online (Sandbox Code Playgroud)

类似地,一旦绝对路径结束,手动构建每个目录级别就会失败MAX_PATH.

这不是新的,不是Perl的错,而且Microsoft在命名文件,路径和命名空间中记录它.他们的修复建议\\?\在任何路径前添加访问Unicode文件名API.但是,这似乎不是Perl脚本的完整修复,因为它仍然失败:

 use File::Path qw( make_path );

 make_path( '\\\\?\\C:\\.....' );  # still fails if path is over MAX_PATH, works otherwise
Run Code Online (Sandbox Code Playgroud)

这可能是因为make_path拉开了它的参数,然后一次一个级别地遍历目录,所以\\?\只适用于顶层,这是在其中MAX_PATH.

向ActiveState挖出了一个错误报告,表明我还需要修改一些其他内容来获取Unicode文件名,而Jan Dubois在Re 2:Windows 2K/XP上的"长"文件名中提供了更多细节,尽管我是不确定它是否适用(并且非常古老).perlrun提到这个用途是转换的工作-C,但显然这部分被放弃了.perl RT队列有一个更新的错误60888:Win32:支持文件名中的完整unicode(使用Wide-system调用). …

windows perl long-filenames

19
推荐指数
2
解决办法
5929
查看次数

如何在批处理脚本中将Windows短名称路径转换为长名称

我正在编写Windows批处理脚本,我有一个参数或变量,其中包含使用短8.3名称的路径.路径可能表示文件或文件夹.

如何将8.3路径转换为长名称路径?至少我希望能够简单地打印出完整的长名称路径.但理想情况下,我想安全地将长名称路径转换为新变量.

例如,给定路径C:\PROGRA~1\AVASTS~1\avast\BROWSE~1.INI,我想返回C:\Program Files\AVAST Software\avast\BrowserCleanup.ini.

作为批处理爱好者,我最感兴趣的是只使用本机Windows命令的纯批处理解决方案.但是,混合使用PowerShell和JScript等其他本机脚本工具也是可以接受的.

注意: 我发布了自己的答案.我在网上搜索,并惊讶地发现这个主题很少.我开发了多种工作策略,并认为其他人可能会对我发现的内容感兴趣.

batch-file long-filenames short-filenames

11
推荐指数
1
解决办法
2921
查看次数

C++ WinAPI:处理长文件路径/名称

我正在寻找在Windows应用程序中处理更长的文件路径.

目前,我有一个文本框(编辑框),用户可以在其中键入绝对文件路径.然后,我将这个类型化的文件路径读GetWindowText入一个声明如下的字符串:TCHAR FilePath[MAX_PATH];

显然,在这里,我依靠的是MAX_PATH常数,这限制了我的260个字符.因此,为了处理更长的文件/路径名称,我可以像这样扩展我的TCHAR数组:TCHAR FilePath[32767];.

或者,还有更好的方法?我可以使用可变长度数组吗?(TCHAR FilePath[];这在C++中是否可能? - 对不起,我对此很新).

先谢谢你!


这是我上面提到的整个代码片段:

TCHAR FilePath[MAX_PATH];
ZeroMemory(&FilePath, sizeof(FilePath));
GetWindowText(hWndFilePath, FilePath, MAX_PATH);
Run Code Online (Sandbox Code Playgroud)

c++ winapi max-path long-filenames

8
推荐指数
2
解决办法
5464
查看次数

如何从ARGV获取长文件名

我想制作一个工具,将一些文件名作为参数,但是当我使用这段代码时:

ARGV.each do|a|
  puts "Argument: #{a}"
end
Run Code Online (Sandbox Code Playgroud)

我在Windows中使用拖放或"发送到",我得到短文件名.所以像文件一样"C:\Ruby193\bin\test\New Text Document.txt"成为 C:\Ruby193\bin\test\NEWTEX~1.TXT参数.

从命令行运行脚本时没有问题,longfilenames作为参数.

当我使用拖放或发送到时,如何获得长文件名?

ruby windows command-line drag-and-drop long-filenames

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

如何通过C ++可执行文件中的清单启用“长路径感知”行为?

我正在尝试遵循Microsoft文档,以解除MAX_PATHWindows 10下API中文件路径的限制。它说:

您还可以通过清单来为每个应用启用新的长路径行为:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)

所以,第一个问题。是否可以在Visual Studio 2017的项目属性中启用它?

第二个问题:我没有在上面找到答案,所以我决定走一条手工路线:

  1. 我这样创建了additional.manifest文本文件:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
            <ws2:longPathAware>true</ws2:longPathAware>
        </windowsSettings>
    </application>
    </assembly>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,将其添加到项目属性中:

在此处输入图片说明

  1. 但是,当我编译它时,它给了我这个警告,并且该清单在应用程序运行时似乎没有任何作用:

1> additional.manifest:清单创作警告81010002:名称空间“ http://schemas.microsoft.com/SMI/2016/WindowsSettings ”中无法识别的元素“ longPathAware ”。

那我在做什么错?

c++ manifest long-filenames visual-studio visual-studio-2017

7
推荐指数
1
解决办法
853
查看次数

如何在Java中解组Windows文件名?

从Java,我将可执行文件提取到使用File.createTempFile()指定的位置.当我尝试运行我的可执行文件时,我的程序在尝试读取第一行输出时挂起.

我发现如果我尝试从另一个程序运行相同的提取可执行文件,如果我将目录指定为C:\ Documents and Settings\username\Local Settings\Temp\prog.exe,它就可以工作.但是,如果我将目录指定为C:\ DOCUME~1\USERNA~1\LOCALS~1\Temp\prog.exe,我就会挂起.

有没有办法解开我的程序中的波浪号文件名,以便我可以指定一个可以工作的目录名?

(因为我总是喜欢解决语言和API设计问题,Java File.createTempFile()和java.io.tmpdir有没有必要评估错误的文件名?)

java windows filenames name-mangling long-filenames

6
推荐指数
1
解决办法
1332
查看次数

OS X 上的 Git“文件名太长”错误

我有一个在 Linux 上跟踪的目录git,我将其复制到 mac OS。由于错误git status,多个文件未被跟踪filename: File name too long。一个文件名(及其相对路径)为 393 个字符。是否有 4096 个字符的限制(Windows 除外)?[参考] 我的core.longpaths设置是true。(同样设置core.precomposeunicode为 true,但可能不相关)。有什么建议吗?

git macos filenames long-filenames short-filenames

5
推荐指数
1
解决办法
4488
查看次数