【问题标题】:A directory magically turns into file一个目录神奇地变成了文件
【发布时间】:2015-07-31 10:13:41
【问题描述】:

我在应用程序的 Documents 文件夹的 viewDidLoad 中创建了一个目录。

NSString *localDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
self.projectsLocalPath = [localDirectory stringByAppendingPathComponent:@"Projects"];
if ([[NSFileManager defaultManager] fileExistsAtPath:self.projectsLocalPath] == NO) {
    [[NSFileManager defaultManager] createDirectoryAtPath:self.projectsLocalPath withIntermediateDirectories:YES attributes:nil error:nil];
}

之后,我列出所有文件,以便它们出现在日志中,检查它是否是目录:

//----- LIST ALL FILES -----
NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:localDirectory error:nil];
for (NSString *aPath in contentOfFolder) {
    NSString *fullPath = [localDirectory stringByAppendingPathComponent:aPath];
    
    BOOL isDir;
    if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && isDir) {
        NSLog(@"%@ - IT IS A DIR", fullPath);
    }
    else {
        NSLog(@"%@ - IT IS NOT A DIR", fullPath);
    }
}

当我第一次运行应用程序时,日志文件列表如下所示:

/var/mobile/Containers/Data/Application/E3...94/Documents/Project.sqlite - 它不是目录

/var/mobile/Containers/Data/Application/E3...94/Documents/Project.sqlite-shm - 它不是目录

/var/mobile/Containers/Data/Application/E3...94/Documents/Project.sqlite-wal - 它不是目录

/var/mobile/Containers/Data/Application/E3...94/Documents/Projects - 这是一个目录

一切都是正确的。但是以下运行在日志中显示 Projects 文件夹不再是目录。

/var/mobile/Containers/Data/Application/E3...94/Documents/Project.sqlite - 它不是目录

/var/mobile/Containers/Data/Application/E3...94/Documents/Project.sqlite-shm - 它不是目录

/var/mobile/Containers/Data/Application/E3...94/Documents/Project.sqlite-wal - 它不是目录

/var/mobile/Containers/Data/Application/E3...94/Documents/Projects - 它不是目录

这就像它神奇地转换成一个文件......问题是当我想查看目录的内容时,我收到一个错误,说它不是一个目录。

我做错了吗?这个问题快把我逼疯了……

提前感谢大家的帮助。

编辑:

在第一次运行时,创建目录后,我会下载一些文件并使用保管箱 API 将它们保存到新创建的目录中:[self.restClient loadFile:plan.path intoPath:self.projectsLocalPath];。将文件保存到此目录时没有错误。

【问题讨论】:

  • 第一次和第二次运行之间会发生什么?他们是独立的吗?结果是随机的?
  • @AminNegm-Awad 在第一次运行时,创建目录后,我会下载一些文件并使用 Dropbox API 将它们保存到新创建的目录中:[self.restClient loadFile:plan.path intoPath:self.projectsLocalPath];。将文件保存到此目录时没有错误。
  • 我创建了一个示例项目,将您的所有代码复制到了我的 viewDidLoad 中。每次在我的日志中显示为目录时,我都没有遇到任何问题!每次运行的目录 GUID 都会不同,但在你的情况下是相似的,为什么会这样?你在硬编码吗?
  • @KrLx_roller 你什么时候开始第二次跑步?下载文件后立即?
  • @AminNegm-Awad 我等待下载并保存三个文件。然后,我重新运行应用程序,它现在似乎是一个文件的目录。

标签: ios objective-c nsfilemanager


【解决方案1】:

通过调用:

[self.restClient loadFile:plan.path intoPath:self.projectsLocalPath];

您要求其余客户端将文件放置在文件夹位置 - 替换文件夹 - 不将其放置在文件夹中。

您需要创建目标文件的完整路径,包括文件夹内的文件名。

【讨论】:

  • 在写入新文件之前,该方法中必须有明确的代码来检查现有文件并将其删除。
  • @trojanfoe 在DBRequest 类中,它会将临​​时文件移动到最终位置,删除当前存在的任何内容
  • 完成!我刚刚添加了完整路径,包括文件名和扩展名,瞧,工作! NSString *newFilePath = [self.projectsLocalPath stringByAppendingPathComponent:plan.filename]; [self.restClient loadFile:plan.path intoPath:newFilePath];
  • @trojanfoe 天哪,你是对的!我很高兴解决了我不介意编写额外无用代码的问题哈哈。谢谢你指出! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 2021-10-21
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多