我需要访问文件"数据"在包文件内容中,该内容是另一个应用程序使用的项目文件。 包可以在任何可用卷上的任何位置。 在我的应用程序中,我要求用户找到他的项目,因此我获得了项目路径。 项目文件中的结构始终相同。所以我可以通过附加项目" base"来找到数据文件。路径与其内容目录的路径,直到数据文件。
但是当我打印路径时,获取所有目录,但包文件名被撤销。 如果我只打印基本路径,我会得到正确的路径,包括最后的包。就像它的状态不能出现在路径的中间。
我也尝试了[NSBundle bundleWithPath]
,但它返回nul
。虽然查找程序不会将项目文件视为一个包而是一个包文件,但它只是绝望中的最后一次调用。
以下是代码:
` NSOpenPanel *getPath = [NSOpenPanel openPanel];
NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"logicx", nil];
[getPath setCanChooseFiles:YES];
[getPath setCanChooseDirectories:NO];
[getPath setTreatsFilePackagesAsDirectories:NO];
[getPath setTitle:@"Select your Logic Pro X project file"];
[getPath setAllowedFileTypes:fileTypes];
[getPath setCanCreateDirectories:YES];
NSInteger clicked = [getPath runModal];
if (clicked == NSFileHandlingPanelOKButton) {
for (NSURL *basePath in [getPath URLs]){
NSURL *url = [NSURL URLWithString:(@"Alternatives/000/ProjectData") relativeToURL:basePath];
//"替代/ 000 / ProjectData的"是包文件的子路径
NSURL *absURL = [url absoluteURL];
NSLog(@"absURL = %@",absURL); `
项目包文件名是:" Track Patch.logicx"
如果我打印basePath
,我会收到:file:///Volumes/Media/Music/Logic/Track%20Patch.logicx
如果我打印absURL
这是必需的路径,我会absURL = file:///Volumes/Media/Music/Logic/Alternatives/000/ProjectData
包裹轨道补丁已经放弃了。
如果我打印网址(指针),我会得到absURL = Alternatives/000/ProjectData -- file:///Volumes/Media/Music/Logic/Track%20Patch.logicx
因此路径反转使我认为[NSURL URLWithString: relativeToURL:basePath];
函数存在问题。那个--
的意思是什么?
非常感谢任何帮助。
答案 0 :(得分:0)
URLWithString:relativeToURL:
的文档说你需要一个尾随斜杠来处理它是一个目录。
"您可以通过提供文件夹的URL来构建文件的URL 作为基本路径(带斜杠)"
您可以使用URLByAppendingPathComponent
方法解决此问题,例如:
NSURL *url = [basePath URLByAppendingPathComponent:@"Alternatives/000/ProjectData"];
"如果原始网址没有以正斜杠结尾,那么 pathComponent不以正斜杠开头,正斜杠是 插入在返回的URL的两个部分之间,除非 原始网址是空字符串。"