-3

我是目标 c 的新程序员。我想在 i 手机内创建“下载”目录(路径:设置(i 手机设置目录))我想知道这可能吗?我正在使用我的手机模拟器来测试程序。

另一个问题是,我如何访问在手机模拟器中创建的目录。下面包含我尝试在手机中创建文件夹的代码。但我无法使用手机模拟器访问该目录。这段代码有什么问题?

NSString *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/Test"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
4

5 回答 5

3

您可以像这样在文档目录中创建目录作为子文件夹:-

-(IBAction)CreatDirInDocDir
{

    NSFileManager *filemgr = [NSFileManager defaultManager];
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *dir = [NSString stringWithFormat:@"%@",DirName];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:dir];

    NSError *error;

    if ([filemgr fileExistsAtPath:path ] == YES){

    }
    else
    {
        NSLog (@"File not found");

        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:&error];
    }


}

当您在文档目录文件夹中创建目录时,您可以像这样获取所有已创建自定义目录的列表:-

//Get all Directory

 NSFileManager *fileMan = [NSFileManager defaultManager];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];

    NSLog(@"files array %@", filePathsArray);

    NSMutableArray *directoryList=[[NSMutableArray alloc]init];


    for ( NSString *direPath in filePathsArray )
    {
        NSString *path = [documentsDirectory stringByAppendingPathComponent:direPath];
        BOOL isDir = NO;
        [fileMan fileExistsAtPath:path isDirectory:(&isDir)];
        if(isDir) {
            NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:path];
            NSLog(@"log path ==%@",fullPath);
            [directoryList addObject:fullPath];
        }
    }

NSLog(@"列表路径 ==%@",directoryList);

现在你有了所有目录的数组,你可以得到任何带有索引的目录:) 希望它可以帮助你

于 2013-01-16T05:36:07.343 回答
2

所有这里发布的方法都是正确的,并且有很多关于它们的答案,但我想警告你一个概念。自 iCloud 推出以来,Apple 开始拒绝将大量数据保存在文档目录中的应用程序,当它们通过缓存的方式使用或以后可以再次下载时。这里的问题是您可以在云上备份您的 ios 设备,并且文档目录是备份的目录之一。你能想象自己在云上的应用程序上备份 1 GB 吗?这就是苹果拒绝的解释。
为避免临时/可重新下载/缓存的数据应保存在缓存目录中。当设备在“磁盘”上的空间不足时,这个有用的目录会被释放,例如当您尝试安装新应用程序并且您没有足够的空间时。因此,如果您的数据可以再次下载并且不是必不可少的,那就可以了。
另一种方法是将数据保留在文档目录中但告诉系统不要备份它们,这可以在保存文件的 doc 子目录中添加一个特殊标志,这里是链接方式,注意这种方法是仅从 5.0.1 可用,因此如果您针对较低的 ioses,您需要检查它的存在。在这种情况下,系统不会释放您的数据并且不会备份它们,这对于苹果指南来说是安全的。
希望这可以帮助

于 2013-01-16T07:00:36.947 回答
1

要创建目录,您可以使用:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Test"];
NSError *error;

if (![[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error])
{
     NSLog(@"Couldn't create directory error: %@", error);
}

要获取该目录中的文件,您可以使用:

NSArray *datArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:dataPath error:&error];
if(error)
{
     NSLog(@"Could not get list from directory, error = %@",error);
}

这里所有的文件名都在datArray.

于 2013-01-16T05:35:44.100 回答
0

无需附加 '/' 。只需使用

NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Test"];

试试这个

 NSArray *dirPath;
NSString *docsDir;
NSFileManager *filemgr = [NSFileManager defaultManager];
dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPath objectAtIndex:0];

if ([filemgr changeCurrentDirectoryPath: docsDir] == NO)
{
    NSLog(@"Error");
}else {
    NSString *currentPath = [filemgr currentDirectoryPath];
    NSLog(@"%@",currentPath);
}

NSString *dataDirectory = [docsDir stringByAppendingPathComponent:@"Test"];
if ([filemgr fileExistsAtPath:dataDirectory]){
        NSLog(@"dir Exist");
    }else{
NSLog(@"Creating Dir");
[filemgr createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
}
于 2013-01-16T05:46:37.547 回答
0

任何人都想在我的手机模拟器中显示您创建的目录,请按照以下步骤操作:

  1. 前往查找器
  2. 单击 Command +Shift + g
  3. 输入 ~/Library 然后点击 Go
  4. 打开应用程序支持 --> i 手机模拟器

然后你可以找到你创建的应用程序和目录..

于 2013-01-17T04:09:13.323 回答