0

我想定义一个包含任何人的用户名的常量文件路径(例如/Users/username/Desktop......在我的具体情况下,它是我创建的目录/var/spool/FolderICreate/username)。

声明这个常量以便我的其他类可以识别它的最佳方法是什么?我目前有一个 globals.h 文件来包含需要查看全局变量的类,但我不确定如何设置该值。 #define显然需要一个硬编码的字符串文字,我不确定我是否可以或如何使用extern const NSString*. 我觉得这应该不难,但我不知所措。

- 编辑 -

正如人们正确指出的那样,我的代码是不必要的,因为我可以使用NSUserName等获取用户名,因此我将其删除。但我认为人们错过了我的问题的重点。我可以看到有多种方法可以获取我想要的路径名——如何将其声明为常量?

4

4 回答 4

3

正如凯林指出的那样,对于您修改后的问题,您不需要一个常数。C 中的常量是在编译时定义的,您不知道编译时的值是什么。

你不想要这个问题的变量。你想要一个静态函数。Foundation 提供了许多类似你想要的东西的东西。如果您想要其他东西,请制作自己的静态函数MYDirectoryForStuff()

不要创建非常量全局变量。那就是疯狂。然后,您必须在使用它们之前验证它们是否已初始化,这会导致各种细微的错误。如果您使用静态函数,那么它可以很容易地自初始化。

于 2012-07-19T21:09:17.037 回答
2

在重新实现 Foundation 框架中已经提供的一堆功能之前,请查看NSPathUtilities 。你会在那里找到一堆专门针对你想要做的事情的方法。

要回答您实际提出的问题,没有直接的方法将变量声明为常量,然后在运行时更改其值……这违背了告诉编译器它是常量的目的。只需将头文件中的变量声明为 anextern NSString *并且只设置一次。:-)

于 2012-07-19T20:56:22.660 回答
2

您永远不应该对用户的主文件夹可能在哪里做出任何假设。

检索当前用户主文件夹路径的正确方法是

NSHomeDirectory()

如果您希望访问用户主文件夹的标准子文件夹之一,也不要对它们的位置做出任何假设,而是使用

NSSearchPathForDirectoriesInDomain()

检索它们。例如,要获取文档文件夹:

NSArray *searchPaths = NSSearchPathForDirectoriesInDomain(
    NSDocumentDirectory, 
    NSUserDomainMask, 
    YES
);
NSLog(@"The documents folder is at %@", [searchPaths objectAtIndex:0]);
于 2012-07-19T20:57:37.837 回答
0

Foundation 框架有一个功能:NSUserName().

于 2012-07-19T20:55:31.293 回答