TKMFileManager 1.0.2

TKMFileManager 1.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2016年11月

Tom Metzger 维护。



  • Tom Metzger

TKMFileManager 是一个简单的工具,用于管理您的 iOS App 的文件,使用 Objective-C 编写(Swift 即将推出)。您不必使用 NSFileManager 和大量代码来执行简单操作,只需使用 TKMFileManager 就可以在一行代码中完成!
坦白说,它并没有什么特别之处——除了不再需要写这样的代码

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

if (![[NSFileManager defaultManager] fileExistsAtPath:newDirectory])
{
    [[NSFileManager defaultManager] createDirectoryAtPath:newDirectory withIntermediateDirectories:NO attributes:nil error:nil];
}

您可以简单地写成这样

TKMFileManager *manager = [[TKMFileManager alloc] init];
[manager createSubdirectory:@"/NewDirectory" inDirectory:manager.documentsDirectory];

当然,几乎每个人都可以写出类似的东西,但为什么要麻烦自己去写呢——这是免费的!

此外,这是 GitHub 上唯一带有 Appldoc 样式文档的文件管理器,可以在这里找到

功能

  • 使用 NSFileManager 构建,使用您可能已经使用的所有方法
  • 智能文件和目录搜索——不知道文件或目录的确切路径?让 TKMFileManager 为您找到它!(《独家!》)
  • 将文件/目录复制到目录中
    • + 查找并复制(独家!
  • 将文件/目录移动到目录中
    • + 查找并移动(独家!
  • 删除文件/目录
    • + 查找并删除(《独家!》)
  • 从文件中检索 NSData(即将推出!
  • 通过 CocoaPods 进行安装(即将推出!

要求

  • 启用 ARC
  • iOS 5.0 或更高版本

用法

要创建一个新的 TKMFileManager 对象(在本例中命名为 manager),只需编写

TKMFileManager *manager = [[TKMFileManager alloc] init];


如果您出于某种原因不想立即初始化它,您可以简单地写入

TKMFileManager *manager = [TKMFileManager alloc];

但是,在您可以使用它之前,您 必须 初始化 TKMFileManager 对象

[manager init];


现在您已经创建了一个 TKMFileManager 对象,您就可以开始管理文件了

创建新目录

TKMFileManager 默认不会指向任何特定目录,所以在创建新目录时,您需要指定新目录的 完整 路径。幸运的是,这很容易,因为 TKFileManager 提供了对您可能要使用的目录的轻松访问

manager.documentsDirectory //Path for the Documents Directory
manager.mainBundleDirectory //Path for the Main Bundle's directory

因此,要在您的应用程序的 Documents 目录中创建新目录,您只需说

[manager createDirectory:[manager.documentsDirectory stringByAppendingPathComponent:@"NewDirectory"]];

或者,您可以使用 createSubdirectory 方法完成此操作

[manager createSubdirectory:@"NewDirectory" inDirectory:manager.documentsDirectory];

为了方便您,createSubdirectory 非常智能,如果您忘记在子目录名前添加 "/",它会自动为您添加。
使用 createDirectory 时,您需要在路径的字符串中已经包含 "/",或者您需要使用 stringByAppendingPathComponent

复制目录

复制目录会将目录的文件在新的位置创建副本,同时保留原始目录中的文件。
要复制目录,您需要指定要复制的目录的完整路径和目标目录的完整路径。如果目标目录不存在,它将被创建。在此示例中,我们将复制 mainBundleDirectory 的内容到 documentsDirectory

[manager copyDirectory:manager.mainBundleDirectory toDirectory:manager.documentsDirectory];

注意:这并不会在 Documents 目录中创建一个 "mainBundle" 子目录,而是直接将 mainBundleDirectory 的内容复制到 documentsDirectory
如果您希望内容复制到 Documents 目录的子目录中,您需要首先创建该子目录,然后将其复制进去。

NSString *mainBundleInDocuments = [manager.documentsDirectory stringByAppendingPathComponent:@"MainBundleFiles"];
[manager copyDirectory:manager.mainBundleDirectory toDirectory:mainBundleInDocuments];

移动目录

移动目录会将目录的文件移动到新的位置。由于文件不再在原始目录中,因此它们将无法在该目录中找到。如果目标目录不存在,它将被创建。
与复制目录类似,在移动目录时,您必须指定源目录的完整路径和目标目录的完整路径。

NSString *mainBundleInDocuments = [manager.documentsDirectory stringByAppendingPathComponent:@"MainBundleFiles"];
[manager moveDirectory:manager.mainBundleDirectory toDirectory:mainBundleInDocuments];

注意:不推荐将 mainBundleDirectory 的内容移动到任何其他目录。

删除目录

删除目录将删除其内容以及目录本身从父目录中。
要删除目录,您只需使用 deleteDirectory 方法。

//(this example assumes "mainBundleInDocuments" is a valid variable)
[manager deleteDirectory:mainBundleInDocuments];

如果您尝试删除的目录不存在,将不会发生任何操作。

复制文件

如果您知道文件的完整路径,您可以将它复制到一个目录中(如果目标目录不存在,它将被创建)。

[manager copyFile:[manager.mainBundleDirectory stringByAppendingPathComponent:@"default.n64skin"] toDirectory:manager.documentsDirectory];

移动文件

如果您知道文件的完整路径,您可以将它移动到一个目录中(如果目标目录不存在,它将被创建)。

[manager moveFile:[manager.mainBundleDirectory stringByAppendingPathComponent:@"default.2600skin"]  toDirectory:manager.documentsDirectory];

记住:如果您移动文件,它将不再在原始目录中。

删除文件

如果您知道文件的完整路径,您可以使用 deleteFile 方法删除它。

[manager deleteFile:[manager.documentsDirectory stringByAppendingPathComponent:@"testROM.z64"]];

获取文件的路径

如果您知道文件所在的目录,您可以使用 getFile 方法获取其完整路径。

NSString *dogeMemePath = [manager getFile:@"doge.png" inDirectory:manager.documentsDirectory];

这将遍历目录及其子目录,并将文件的完整路径返回给您(如果您不知道它是否在子目录中,这很方便)。

但是,如果你的文件存储位置不清楚怎么办呢?嗯,使用TKMFileManager独有的findAndGetFile方法,它将搜索所有可用的目录(目前仅限主包和文档)及其所有子目录,直到找到你的文件

NSString *triggeredMemePath = [manager findAndGetFile:@"triggered.png"];

此功能也适用于移动、复制和删除文件,如下所示

[manager findAndCopyFile:@"repost.png" toDirectory:manager.documentsDirectory];
[manager findAndMoveFile:@"moveItSomewhereElsePatrick.png" toDirectory:manager.documentsDirectory];
[manager findAndDeleteFile:@"harambe.png"];

许可证

TKMFileManager遵循MIT许可证,许可证全文可在许可证文件中查看。
根据MIT许可证的要求,需要进行归属权声明——此外,我也喜欢看到我所编写的代码如何帮助其他开发者和他们的用户!

使用TKMFileManager的酷项目

  • Revera - iOS设备上的任天堂64仿真器

您的项目是否使用TKMFileManager?

如果您有一个使用TKMFileManager的绝佳项目,请联系我(信息见下文),我将确保将您的项目添加到列表中!

联系方式

请将所有错误报告给GitHub上的“问题”页面。如果您有一个使用TKMFileManager的酷项目,需要帮助了解如何使用它(超出本指南所述),或只是想打个招呼,您可以通过以下方式联系我

Twitter
@TheTomMetzger

Email
[email protected]