【发布时间】:2022-08-04 03:11:13
【问题描述】:
我正在尝试创建一个面板,让用户选择保存文件的路径。当用户从显示相对路径(即 /folder)的面板中选择一个目录时,URLs 属性包含 /folder。当用户选择显示完整路径的目录时,panel 的 URLs 属性包含完整路径(即 /User/name/folder)。即使用户面板显示相对路径,如何确保 URLs 属性肯定包含完整路径?
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setCanChooseFiles:NO];
[panel setCanChooseDirectories:YES];
[panel setAllowsMultipleSelection:NO]; // yes if more than one dir is allowed
NSInteger clicked = [panel runModal];
NSArray<NSURL *> *URLs;
if (clicked == NSFileHandlingPanelOKButton) {
URLs = [panel URLs];
}
else{
URLs = [NSArray arrayWithObject:[NSURL URLWithString:[NSString stringWithFormat:@\"file://%s/\", getenv(\"HOME\")]]];
}
for (NSURL *url in URLs) { // When user clicks cancel, [panel URLs] is empty
NSString *selectedDirectoryPath = [url.absoluteString substringFromIndex:6];
// NSString *selectedDirectoryPath = [url path];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *sourceFilePath = [NSString stringWithFormat:@\"%@/%@\", NSHomeDirectory(), _fileName];
NSString *destFilePath = [NSString stringWithFormat:@\"%@%@\", selectedDirectoryPath, _fileName];
}
我以为我可以在 url 上使用 path 实例属性,但是一旦用户单击 OK 到带有 NSFileHandlingPanelOKButton 的文件路径,数组就会被填充。
编辑:我发现一个回复建议在 NSOpenPanel URL to string 中使用 beginSheetModalForWindow ,但是您如何使用此功能?
-
你考虑过使用 NSSavePanel 吗?这就是用户在保存文件时所期望的。 developer.apple.com/documentation/appkit/nssavepanel
-
我希望允许用户选择他们想要保存的路径,看起来 NSSavePanel 不允许该选项。 stackoverflow.com/questions/3396081/…
标签: objective-c macos relative-path absolute-path nsopenpanel