【问题标题】:Create a Folder (bundle) in Cocoa在 Cocoa 中创建一个文件夹(包)
【发布时间】:2012-04-26 20:23:09
【问题描述】:

我正在尝试使用 Cocoa 以编程方式创建一个文件夹。

我写了一个NSString 类别,我们在那里有以下函数:

- (void)createAsFolder
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError* err = nil;

    [fileManager createDirectoryAtPath:self withIntermediateDirectories:YES attributes:nil error:&err];

    if (err)
    {
        NSLog(@"ERROR : %@",err);
    }
}

所以,简而言之,假设我们有一个NSString* path = @"/some/path/is/here";,我们可以通过以下方式简单地创建它:

[path createAsFolder];

问题是,虽然它对普通文件夹非常有效,但当指定的路径是一个包(即:带扩展名)时,它就不行了。例如

NSString* path = @"/this/is/a/path/to/some/bundle.bun";

[path createAsFolder];

上述方法不起作用。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • @EvanMulawski 不,绝对没有错误(并且绝对没有捆绑/文件夹在它应该在的地方);我已经通过日志检查了所有路径——它们是正确的。我基本上是将整个文件树结构从一个位置复制到另一个位置。一切都很好,除了捆绑包(及其内容)。

标签: objective-c cocoa directory nsfilemanager bundles


【解决方案1】:

【讨论】:

  • 我已经研究了NSFileWrapper 10 次,并认为它是一种可能的解决方案。你让我重新检查,让我重新考虑......是的,你是 100% 正确的。我为目录树编写了一个函数,一个用于复制文件,一个用于创建文件夹(它没有完全工作,因为它偶然发现了包/捆绑包),一个用于遍历整个树并创建子节点,虽然这一切都可以用两条糟糕的线来完成......有时我觉得有点傻......非常感谢,伙计! :-)
  • 这真的是在黑暗中拍摄的。几天前我在学习基于文档的应用程序设计时读到了它,我只是认为它可能有用;)
【解决方案2】:

好的,这就是答案(感谢@thundersteele),如果您想将完整的文件树从一个位置复制到另一个位置:

NSFileWrapper* w = [[NSFileWrapper alloc] initWithPath:initialPath];

[w writeToFile:destinationPath atomically:YES updateFilenames:YES];

是的:无论子文件夹是包/捆绑包还是其他任何东西,都绝对没有问题。没那么难吧?只有 2 行...大声笑

【讨论】:

  • 该方法自 OS X v10.6 起已弃用,您应该改用 writeToURL:options:originalContentsURL:error:。
猜你喜欢
  • 2013-03-03
  • 2011-07-05
  • 2021-01-29
  • 2011-03-27
  • 2019-02-21
  • 1970-01-01
  • 2010-11-10
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多