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
为字符串,然后将其添加到我的数组中.我怎样才能做到这一点?
有人可以告诉我们/我,如果MAX_PATH问题仍然存在于Windows 10的(技术预览版)中.如果它存在:路径和单个文件名有多少个字符?
我试图在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
我有一个构建过程的一部分,在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批处理脚本,我有一个参数或变量,其中包含使用短8.3名称的路径.路径可能表示文件或文件夹.
如何将8.3路径转换为长名称路径?至少我希望能够简单地打印出完整的长名称路径.但理想情况下,我想安全地将长名称路径转换为新变量.
例如,给定路径C:\PROGRA~1\AVASTS~1\avast\BROWSE~1.INI
,我想返回C:\Program Files\AVAST Software\avast\BrowserCleanup.ini
.
作为批处理爱好者,我最感兴趣的是只使用本机Windows命令的纯批处理解决方案.但是,混合使用PowerShell和JScript等其他本机脚本工具也是可以接受的.
注意: 我发布了自己的答案.我在网上搜索,并惊讶地发现这个主题很少.我开发了多种工作策略,并认为其他人可能会对我发现的内容感兴趣.
我正在寻找在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) 我想制作一个工具,将一些文件名作为参数,但是当我使用这段代码时:
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作为参数.
当我使用拖放或发送到时,如何获得长文件名?
我正在尝试遵循Microsoft文档,以解除MAX_PATH
Windows 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的项目属性中启用它?
第二个问题:我没有在上面找到答案,所以我决定走一条手工路线:
我这样创建了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)然后,将其添加到项目属性中:
1> additional.manifest:清单创作警告81010002:名称空间“ http://schemas.microsoft.com/SMI/2016/WindowsSettings ”中无法识别的元素“ longPathAware ”。
那我在做什么错?
c++ manifest long-filenames visual-studio visual-studio-2017
从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有没有必要评估错误的文件名?)
我有一个在 Linux 上跟踪的目录git
,我将其复制到 mac OS。由于错误git status
,多个文件未被跟踪filename: File name too long
。一个文件名(及其相对路径)为 393 个字符。是否有 4096 个字符的限制(Windows 除外)?[参考] 我的core.longpaths
设置是true。(同样设置core.precomposeunicode
为 true,但可能不相关)。有什么建议吗?
long-filenames ×10
windows ×4
batch-file ×2
c++ ×2
command-line ×2
filenames ×2
arrays ×1
c# ×1
git ×1
java ×1
limit ×1
macos ×1
manifest ×1
max-path ×1
path ×1
perl ×1
ruby ×1
winapi ×1
windows-10 ×1