gpt4 book ai didi

objective-c - 在 Mac App 中获取应用程序目录路径的正确方法

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:01 25 4
gpt4 key购买 nike

在我的 Mac OS 应用程序中,我尝试使用以下代码获取应用程序当前目录,以便在应用程序包路径中生成日志文件。

NSString *path = [[[NSFileManager defaultManager] currentDirectoryPath] stringByAppendingPathComponent:@"TSPlogfile.txt"];

当我从 Xcode 运行应用程序但发现 [[NSFileManager defaultManager] currentDirectoryPath] 时它工作正常只返回 /在运行 applicationxxx.app 时来自取景器。

后来我用[[[NSBundle mainBundle].bundlePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"TSPlogfile.txt"];解决了这个问题

这在两种情况下都可以正常工作(从 Xcode 和 finder 运行应用程序)

你能解释一下为什么 [[NSFileManager defaultManager] currentDirectoryPath]从 finder 运行应用程序时失败?

最佳答案

您不应向 bundle 或应用程序所在的文件夹写入任何内容。如果您的应用程序是 sandboxed ,你将无法做到。

改用“应用程序支持”文件夹:

NSError *error;
NSFileManager *manager = [NSFileManager defaultManager];
NSURL *applicationSupport = [manager URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:false error:&error];
NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
NSURL *folder = [applicationSupport URLByAppendingPathComponent:identifier];
[manager createDirectoryAtURL:folder withIntermediateDirectories:true attributes:nil error:&error];
NSURL *fileURL = [folder URLByAppendingPathComponent:@"TSPlogfile.txt"];

我在上面使用了 NSURL 实现,但如果使用路径,同样的概念也适用。

参见 File System Programming Guide: macOS Library Directory Details .

你问:

Can you explain why the [[NSFileManager defaultManager] currentDirectoryPath] fails while running app from finder?

您在 Finder 中查看的文件夹与应用程序运行时的“当前目录”不同。简而言之,“当前目录”与应用程序所在的位置无关。

关于objective-c - 在 Mac App 中获取应用程序目录路径的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41249681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com