我正在编写一个程序,需要从系统上的任何地方读取文件。该程序的某些用户的路径超过 260 个字符的限制。在OpenFileDialog不使用文件超过260个字符的路径。
我试过同时使用System.Windows.Forms.OpenFileDialog和Microsoft.Win32.OpenFileDialog。对于前者,当我导航到并选择文件后单击“打开”时,窗口不会关闭,程序也不会继续。在后者的情况下,当我单击“打开”时窗口将关闭,但路径是一个空字符串。
我已经更新了我电脑上的注册表。我已经编辑了应用程序清单文件。我会尝试将“//?/”字符串添加到我的路径中,但没有要添加到的路径。
var dialog = new OpenFileDialog
{
// initialize dialog
}
if (dialog.ShowDialog() == DialogResult.OK) // DialogResult.OK replaced with true if using Microsoft.Win32.OpenFileDialog
{
// if when using System.Windows.Forms.OpenFileDialog, I will never get to this point
// if using Microsoft.Win32.OpenFileDialog, I will get here but dialog.FileNames will be empty
}
Run Code Online (Sandbox Code Playgroud)
如果我更新了注册表和应用程序清单,我希望上面的代码在长路径和短路径下都能正常工作。我怀疑这只是不受支持,但我所有的搜索都表明人们提供的解决方案要么不起作用,要么仅适用于特定情况。
有谁知道Java如何能够规避Windows MAX_PATH限制.使用下面的代码,我能够在Java中创建一个非常长的路径,并且能够执行I/O,这在使用没有前缀\\?\的Windows时是不可能的.
public static void main(String[] args) throws IOException {
BufferedWriter bufWriter = null;
try {
StringBuilder s = new StringBuilder();
for (int i = 0; i < 130; i++) {
s.append("asdf\\");
}
String filePath = "C:\\" + s.toString();;
System.out.println("File Path = " + filePath);
File f = new File(filePath);
f.mkdirs();
f = new File(f, "dummy.txt");
System.out.println("Full path = " + f);
bufWriter = new BufferedWriter(new FileWriter(f));
bufWriter.write("Hello");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (bufWriter != …Run Code Online (Sandbox Code Playgroud) 我试图用PowerShell命令copy-item作为xcopy一个磁盘的内容复制到另一个.
copy-item -Path h:\* -Destination g:\ -Recurse -Force
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了以下错误:
Copy-Item:指定的路径,文件名或两者都太长.完全限定的文件名必须少于260个字符,目录名必须少于248个字符.
我得到这些错误足以阻止手动搜索和复制具有长路径的文件或文件夹.避免这个问题的最佳方法是什么?
在我维护的代码中,我遇到了:
from ctypes.wintypes import MAX_PATH
Run Code Online (Sandbox Code Playgroud)
我想将其更改为:
try:
from ctypes.wintypes import MAX_PATH
except ValueError: # raises on linux
MAX_PATH = 4096 # see comments
Run Code Online (Sandbox Code Playgroud)
但我找不到任何方法从 python ( os, os.path, sys...)获取最大文件系统路径的值- 有标准方法还是我需要外部库?
或者在 linux 中没有类似于 MAX_PATH 的东西,至少不是发行版中的标准?
try:
MAX_PATH = int(subprocess.check_output(['getconf', 'PATH_MAX', '/']))
except (ValueError, subprocess.CalledProcessError, OSError):
deprint('calling getconf failed - error:', traceback=True)
MAX_PATH = 4096
Run Code Online (Sandbox Code Playgroud) 我应该腾出空间,像这样:
len = MAX_PATH * sizeof(_TCHAR) + sizeof(_TCHAR);
Run Code Online (Sandbox Code Playgroud)
或是:
len = MAX_PATH + sizeof(_TCHAR);
Run Code Online (Sandbox Code Playgroud)
适合包含unicode的路径的大小?
这是我编写的示例代码,用于检查我是否能够创建名称长度大于的文件夹MAX_PATH-
wstring s = L"D:\\Test";
wstring s2 = L"\\?\D:\\datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000";
int ret = CreateDirectoryEx(s.c_str(), s2.c_str(), NULL);
int error = GetLastError();
Run Code Online (Sandbox Code Playgroud)
它不起作用,返回的错误是ERROR_PATH_NOT_FOUND.任何人都可以告诉我代码中的问题是什么?
注意: "D:\ Test"文件夹是现有文件夹.我使用的是Windows 7.
max-path ×6
winapi ×2
.net ×1
c ×1
c# ×1
c++ ×1
copy-item ×1
file ×1
file-copying ×1
filesystems ×1
java ×1
linux ×1
path ×1
powershell ×1
python-2.7 ×1
windows ×1
xcopy ×1