在R
on中Windows
,tempdir()
返回包含短名称的路径non 8dot3 directory names
.
如何将它们扩展为长名称?
使用纯R
代码的答案是有利的,但使用通过使用的众所周知的shell命令的答案system()
很好作为备份.
我将Dropbox与encfs一起使用。问题是我的主机在文件名中仅支持256个字符,因此encfs仅支持〜190。有没有一种方法可以避免这种情况,而无需重新安装主机文件系统并增加其限制?
我主要在ubuntu 11.10中使用ext4作为文件系统,但同时将hfs作为文件系统的Mac OSX 10.6和Windows对我而言并不那么重要。
干杯,布鲁贝尔。
我正在通过使用库函数_wsplitpath_s()
来解析路径以与 Win32 API 函数一起使用。
根据此 MSDN 文档,长路径(长于MAX_PATH
字符)必须以前缀\\?\
. 但是,当我将它附加到完整路径字符串时,_wsplitpath_s()
无法正确解析它。
示例代码:
std::wstring FullPath = L"\\\\?\\K:\\A Directory\\Another Directory\\File Name.After Period.extension";
std::wstring Drive, Directory, FileName, Extension;
Drive.resize (FullPath.size());
Directory.resize (FullPath.size());
FileName.resize (FullPath.size());
Extension.resize (FullPath.size());
errno_t Error = _wsplitpath_s( FullPath.c_str(),
&Drive[0],
Drive.size(),
&Directory[0],
Directory.size(),
&FileName[0],
FileName.size(),
&Extension[0],
Extension.size());
std::wcout << L"Full path to be splitted : " << FullPath.c_str() << std::endl;
std::wcout << L"Drive : " << Drive.c_str() << std::endl;
std::wcout << L"Directory : " …
Run Code Online (Sandbox Code Playgroud) 在R中,我write.table()
用来将文件写入具有长名称的目录中嵌入的位置。但是它的错误如下:
file(file,ifelse(append,“ a”,“ w”))中的错误:无法打开连接另外:警告消息:在file(file,ifelse(append,“ a”,“ w”))中:无法打开文件'data / production / Weekly_Prod_201407_Selling_Price_Snapshot_20140930_Median_Selling_Price_Map.csv':没有此类文件或目录
然后当我将文件名缩短为 Weekly_Prod.csv
,它起作用了!因此,似乎长路径和长文件名导致R错误。
我对其进行了几次测试,发现路径+文件名的总长度限制为260个字符。也就是说,R大于等于261个字符时会出错。有办法解决这个问题吗?请帮忙。谢谢!
如果这些文件的完整路径超过260个字符,则无法枚举目录中包含的文件。以下代码显示了该问题:
void TestLongPath(DirectoryInfo testDirectory)
{
if (testDirectory.Exists)
{
try
{
testDirectory.GetFiles("SomeFileNamePattern*");
}
catch (System.IO.DirectoryNotFoundException)
{
Console.WriteLine("Long path test failed for " + testDirectory.FullName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的app.manifest文件包含:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)
但是所有要做的就是将错误从PathTooLongException更改为DirectoryNotFoundException。
这是我的App.config:
<?xml version="1.0" encoding="utf-8"?><configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime></configuration>
Run Code Online (Sandbox Code Playgroud)
我在Windows 10 Pro上,使用Visual Studio 2019 16.1.1。我的目标是.NET 4.7.2。
如何枚举这些超长目录中的文件?它们位于我无法控制的共享网络驱动器上,因此重命名目录对我来说不是一种选择。
昨天我试图调试 AWS SystemsManager 源代码,以尝试追踪它在冷启动我的 ASP.NET Core 6 应用程序时导致的长时间延迟。我什么也没得到,但在那段时间它抛出了有关生成的编辑器配置的错误。
我导航到错误,它打开了一些看起来像项目文件的东西。我认为这是源代码的项目文件,并注释掉了该行代码,现在构建很顺利。最后,我取消引用了源项目副本并恢复了 NuGet 包并关闭了当天。
今天,我无法使用 Visual Studio 2022 构建任何解决方案。我尝试的所有操作都会抛出一个错误,即解决方案中每个项目的文件夹GeneratedMSBuildEditorConfig.editorconfig
中缺少a obj
。
我想我最终注释掉了 Visual Studio 配置文件中的某些内容,但我完全不知道文件名是什么或它位于何处,因此我可以修复我的错误。
有人建议我在哪里可以找到这个特殊文件吗?我想在更糟糕的情况下我可以修复 VS,但我不想尝试这样做并发现它破坏了其他东西。
我的 VS2019 仍然可以正常工作,因此它与 VS2022 安装隔离。
在处理尝试创建现有文件或尝试使用不存在的文件时发生的错误时OSError
,抛出的s具有子类(FileExistsError
,FileNotFoundError
).当文件名太长时,我找不到特殊情况的子类.
确切的错误消息是:
OSError: [Errno 36] File name too long: 'filename'
Run Code Online (Sandbox Code Playgroud)
我想捕获文件名太长时发生的OSError,但仅当文件名太长时才会发生.我不希望赶上其他OSError
可能发生的秒.有没有办法实现这个目标?
编辑:我知道我可以检查文件名长度,但最大文件名长度变化太大,具体取决于操作系统和文件系统,我没有看到这样的"干净"解决方案.
我正在使用SaveFileDialog并且必须在FileName中设置长字符串(longFileName).字符串longFileName在运行时已知.
如果我订
saveFileDialog.FileName = longFileName ;
Run Code Online (Sandbox Code Playgroud)
然后我明白了System.IO.PathTooLongException
.
我该怎么做?
目录'C:\ temp'有两个名为'GZ96A7005.tif'和'GZ96A7005001.tif'的文件.它们具有不同的长度和相同的扩展名.现在我运行下面的代码:
string[] resultFileNames = Directory.GetFiles(@"C:\temp", "????????????.tif");
Run Code Online (Sandbox Code Playgroud)
'resultFileNames'返回两个项'c:\ temp\GZ96A7005.tif'和'c:\ temp\GZ96A7005001.tif'.但是Window Search可以正常工作.这就是为什么以及如何得到我想要的?