用户/用户名/库目录会发生啥。为啥我不能更改当前目录?
Posted
技术标签:
【中文标题】用户/用户名/库目录会发生啥。为啥我不能更改当前目录?【英文标题】:What happens to the Users/username/Library directory. Why can't I change the current directory?用户/用户名/库目录会发生什么。为什么我不能更改当前目录? 【发布时间】:2014-11-22 20:08:26 【问题描述】:我正在关注 Stephen Kochan 的“Objective-C 第四版编程”中的代码示例。
程序查找一个文件,并对其执行一些操作:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
@autoreleasepool
NSString *fName = @"testfile";
NSFileManager *fm;
NSDictionary *attr;
//Need to create an instance of the file manager
fm = [NSFileManager defaultManager];
//Let's make sure our test file exists first
NSLog([fm currentDirectoryPath]);
if ([fm fileExistsAtPath: fName] == NO)
NSLog(@"File doesn't exist!");
return 1;
//now lets make a copy
if ([fm copyItemAtPath: fName toPath: @"newfile" error: NULL])
NSLog(@"File Copy failed!");
return 2;
//Now let's see test to see if the two files are equal
if ([fm contentsEqualAtPath: fName andPath: @"newfile"] == NO)
NSLog(@"Files are Not Equal!");
return 3;
//Now lets rename the copy
if ([fm moveItemAtPath: @"newfile" toPath: @"newfile2" error: NULL] == NO)
NSLog(@"File rename Failed");
return 4;
//get the size of the newfile2
if((attr = [fm attributesOfItemAtPath: @"newfile2" error: NULL]) == nil)
NSLog(@"Couldn't get file attributes");
return 5;
NSLog(@"File size is %llu bytes", [[attr objectForKey: NSFileSize] unsignedLongLongValue]);
//And finally, let's delete the original file
if([fm removeItemAtPath: fName error: NULL])
NSLog(@"file removal failed");
return 6;
NSLog(@"All operations were successful");
//Display the contents of the newly-createed file
NSLog(@" %@", [NSString stringWithContentsOfFile: @"newfile2" encoding:NSUTF8StringEncoding error: NULL]);
return 0;
我创建了一个名为“testfile”的文件并将其放在项目目录中。当我运行程序时,它找不到该文件。我添加了 [NSFileManager currentDirectoryPath] 来检查当前路径,这显然是这样的:
/Users/myusername/Library/Developer/Xcode/DerivedData/Prog_16.1-eekphhgfzdjviqauolqexkowfqfg/Build/Products/Debug
我去寻找图书馆目录,但它不存在。这是程序运行时创建的临时目录,退出后删除吗?
编辑:我尝试使用 [NSFileManager changeCurrentDirectoryPath: newPath] 更改当前目录的路径,但无法更改路径。我尝试将 newPath 设置为 @"Users/username/Desktop",但也失败了!
【问题讨论】:
请参阅this answer at apple.stackexchange.com 了解如何访问库文件夹。 【参考方案1】:Library 目录确实存在,但它作为标准是隐藏的。打开终端并输入命令:chflags nohidden ~/Library/。
然后再看一遍,它会神奇地出现在那儿!
编辑:对于使用 NSFileManager 进行编程,有一个非常有用的函数:NSSearchPathForDirectoriesInDomains()。例如。获取桌面do目录:
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"test.txt"];
NSString *test = @"hello";
[test writeToFile:path atomicallly:YES];
这会将一个小 txt 文件写入您的桌面。 (只要您的应用程序没有被沙盒化)。
希望这会有所帮助。
【讨论】:
【参考方案2】:当您将文件放在项目目录中时,它会作为应用程序包的一部分提供。要获取捆绑目录树,请使用NSBundle
...
// use the file extension (if any) for the ofType: param
NSString *path = [[NSBundle mainBundle] pathForResource:@"testfile" ofType:@""];
if ([[NSFileManager defaultManager] fileExistsAtPath:path])
NSLog(@"there it is! %@", path);
【讨论】:
刚刚注意到这个问题被标记为 osx,而不是 ios。不确定这个答案是否适用,但可能。以上是关于用户/用户名/库目录会发生啥。为啥我不能更改当前目录?的主要内容,如果未能解决你的问题,请参考以下文章
iOS Safari Web 扩展 - 当我们添加新的所需权限时,当前用户会发生啥
如果我在 Linux 上更改 C++ 动态共享库而我的可执行程序在它上面使用会发生啥