Cocoa 使用NSURL访问包内的文件路径
我需要访问包文件内容中的文件“数据”,该文件是另一个应用程序使用的项目文件。 该包可以在任何可用卷上的任何位置。 因此,在我的应用程序中,我要求用户定位他的项目,因此我获得了项目路径。 项目文件中的结构始终相同。因此,我可以通过将项目“base”路径与其内容目录的路径附加到数据文件中来定位数据文件 但是当我打印路径时,所有目录都会正常,但是包文件名会被撤销。 如果我只打印基本路径,我会得到正确的路径,包括末尾的包。就像它的状态不能出现在路径的中间。 我也尝试过Cocoa 使用NSURL访问包内的文件路径,cocoa,path,Cocoa,Path,我需要访问包文件内容中的文件“数据”,该文件是另一个应用程序使用的项目文件。 该包可以在任何可用卷上的任何位置。 因此,在我的应用程序中,我要求用户定位他的项目,因此我获得了项目路径。 项目文件中的结构始终相同。因此,我可以通过将项目“base”路径与其内容目录的路径附加到数据文件中来定位数据文件 但是当我打印路径时,所有目录都会正常,但是包文件名会被撤销。 如果我只打印基本路径,我会得到正确的路径,包括末尾的包。就像它的状态不能出现在路径的中间。 我也尝试过[NSBundle bundleWi
[NSBundle bundleWithPath]
,但它返回nul
。虽然取景器不把项目文件看作一个包,但它只是一个包文件,它只是绝望中的最后一个调用。p>
代码如下:
` 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];
//“Alternations/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
包裹轨道补丁已经在这里被丢弃了
如果我打印url(指针),我会得到这个absURL=alternations/000/ProjectData--file:///Volumes/Media/Music/Logic/Track%20Patch.logicx
因此路径是反向的,这让我觉得[NSURL URLWithString:relativeToURL:basePath]有问题代码>函数。顺便问一下,-
是什么意思
任何帮助都将不胜感激。关于URLWithString:relativeToURL:
的文档说,您需要一个尾随斜杠来处理目录
“您可以通过提供文件夹的URL来构造文件的URL
作为基本路径(带尾随斜杠)”
您可以使用URLByAppendingPathComponent
方法来解决此问题,如下所示:
NSURL *url = [basePath URLByAppendingPathComponent:@"Alternatives/000/ProjectData"];
“如果原始URL未以正斜杠结尾,则
pathComponent不是以正斜杠开始的,正斜杠是
插入到返回URL的两部分之间,除非
原始URL是空字符串。“
URLWithString:relativeToURL:
的文档中说,您需要一个尾随斜杠来处理目录
“您可以通过提供文件夹的URL来构造文件的URL
作为基本路径(带尾随斜杠)”
您可以使用URLByAppendingPathComponent
方法来解决此问题,如下所示:
NSURL *url = [basePath URLByAppendingPathComponent:@"Alternatives/000/ProjectData"];
“如果原始URL未以正斜杠结尾,则
pathComponent不是以正斜杠开始的,正斜杠是
插入到返回URL的两部分之间,除非
原始URL是空字符串。“
我真的不明白你在问什么。“Alternations/000/ProjectData”是您希望在包中查看的子路径吗?是的,很抱歉,如果我不够清楚,我将编辑此帖子以澄清这一点。谢谢你我真的不明白你在问什么。“Alternations/000/ProjectData”是您希望在包中查看的子路径吗?是的,很抱歉,如果我不够清楚,我将编辑此帖子以澄清这一点。谢谢谢谢你贾斯汀,这就解决了;)再次感谢您花时间解释为什么我的功能不合适!谢谢你,贾斯汀,这就解决了它;)再次感谢您花时间解释为什么我的功能不合适!