声明字符串,然后使用 Cocoa 从路径打开字符串

Posted

技术标签:

【中文标题】声明字符串,然后使用 Cocoa 从路径打开字符串【英文标题】:Declare String then open string from Path with Cocoa 【发布时间】:2009-06-07 02:54:28 【问题描述】:

我已经像这样声明了一个字符串

NSString* fileName = [files objectAtIndex:i]; NSLog(文件名);

NSImage* imageFromBundle = [[NSImage alloc] initWithContentsOfFile:fileName];

并希望使用该文件名打开不同目录中的文件。 我想出了这个

NSImage* imageFromBundle2; imageFromBundle2 = [[NSImage alloc] initWithContentsOfFile:@"/Users/rhaynes/Documents/works4/" 文件名];

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

我假设您的 fileName 字符串实际上是一个文件名,例如“myImage.png”。许多 Objective-C 文档实际上是指文件路径时引用文件名 - 所以有时会令人困惑。

您要做的是创建一个 NSString 来表示您要加载的文件的完整路径。例如,你可以说:

NSString * path = [NSString stringWithFormat: @"/Users/rhaynes/Documents/works4/%@", fileName];

该行使用提供的格式字符串和参数创建一个新的 NSString(格式字符串中的 %@ 表示应该在其中插入 fileName 的字符串值。) StringWithFormat 是一个非常强大的函数,所以你一定要检查它在文档中。

然后你可以调用 initWithContentsOfFile:path,它应该会给你你想要的图像。

【讨论】:

哇你是男人。感谢您的快速回复,您让我更接近我的答案,但是我的日志文件显示了我的文件的完整路径,而不仅仅是 fiename 2009-06-06 23:22:40.188 appagain2[26864] Users/rhaynes/Documents /works4//Users/rhaynes/Documents/works3/work1.jpg 你知道像Users/rhaynes/Documents/works4/work1.jpg这样获取文件名的方法吗 好的。这意味着您的 fileName 变量实际上是一个完整路径。你真正想要的只是最后一部分:“work1.jpg”。然后,您可以将其附加到“正确”路径。 Objective-C 字符串类提供了一个名为 lastPathComponent 的简洁函数,它将只返回该部分。因此,在我输入答案的 stringWithFormat: 行中,只需将 fileName 替换为 [fileName lastPathComponent]。应该这样做!【参考方案2】:

NSString* fileName = [files objectAtIndex:i]; NSLog(文件名);

不要将非硬编码字符串作为格式字符串参数传递。如果它们包含格式说明符,您将得到垃圾或崩溃。 (例如,用fileName = @"foo%sbar" 试试这个。然后用fileName = @"foo%fbar" 试试,以获得更多乐趣。)

你的 NSLog 语句应该是:

NSLog(@"%@", fileName);

[I] 想使用该文件名打开不同目录中的文件。我想出了这个

NSImage* imageFromBundle2; imageFromBundle2 = [[NSImage alloc] initWithContentsOfFile:@"/Users/rhaynes/Documents/works4/" filename ];

您只能以这种方式连接字符串文字;正如您自己所看到的,当其中一个字符串不是文字时,这是一个语法错误。

首先,如果fileName 实际上是一个路径名,您需要使用lastPathComponent 来获取实际的文件名。所以:

NSString *path = [files objectAtIndex:i];
NSString *filename = [path lastPathComponent];

然后,使用stringByAppendingPathComponent: 将其添加到新的超级路径中。

NSString *desiredFilenamePath = [directoryPath stringByAppendingPathComponent:filename];

现在您有了想要传递给 NSImage 初始化程序的路径名。

【讨论】:

以上是关于声明字符串,然后使用 Cocoa 从路径打开字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用swift的临时文件路径

在 Cocoa 中打开任何文件

如何让 Cocoa 应用程序从终端运行一个动作,然后返回结果

Python3 & 如何在Python中写文件路径

Cocoa 字符串格式说明符的完整列表

奇怪的字符串结果