ios 添加c语言文件路径,让自己开发的iOS App通过iTunes共享文件到Document目录

让自己开发的iOS App通过iTunes共享文件到Document目录

让自己开发的iOS App通过iTunes共享文件到Document目录

1、在plist文件中

添加Application supports iTunes file sharing,设置为YES。

2、

44410891e6bfdc0575eecd854e23965f.png

69887e5bfd2f47b572cef90529d8bfdc.png

3、

监听Document目录的文件改动

使用GCD 与 file descriptor 实现对文件夹内容的修改进行监听, 实现的关键代码如下

// 这里边需要定义两个成员变量

{

dispatch_queue_t _zDispatchQueue;

dispatch_source_t _zSource;

}

// 开始监听Document目录文件改动, 一旦发生修改则发出一个名为ZFileChangedNotification的通知

- (void)startMonitoringDocumentAsynchronous

{

// 获取沙盒的Document目录

NSString *docuPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

[self startMonitoringDirectory:docuPath];

}

// 监听指定目录的文件改动

- (void)startMonitoringDirectory:(NSString *)directoryPath

{

// 创建 file descriptor (需要将NSString转换成C语言的字符串)

// open() 函数会建立 file 与 file descriptor 之间的连接

int filedes = open([directoryPath cStringUsingEncoding:NSASCIIStringEncoding], O_EVTONLY);

// 创建 dispatch queue, 当文件改变事件发生时会发送到该 queue

_zDispatchQueue = dispatch_queue_create("ZFileMonitorQueue", 0);

// 创建 GCD source. 将用于监听 file descriptor 来判断是否有文件写入操作

_zSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, filedes, DISPATCH_VNODE_WRITE, _zDispatchQueue);

// 当文件发生改变时会调用该 block

dispatch_source_set_event_handler(_zSource, ^{

// 在文件发生改变时发出通知

// 在子线程发送通知, 这个通知触发的方法会在子线程当中执行

[[NSNotificationCenter defaultCenter] postNotificationName:ZFileChangedNotification object:nil userInfo:nil];

});

// 当文件监听停止时会调用该 block

dispatch_source_set_cancel_handler(_zSource, ^{

// 关闭文件监听时, 关闭该 file descriptor

close(filedes);

});

// 开始监听文件

dispatch_resume(_zSource);

}

// 停止监听指定目录的文件改动

- (void)stopMonitoringDocument

{

dispatch_cancel(_zSource);

}

4、

获取Document目录下的所有文件

这里边DirectoryWatcher是做成一个单例的工具类, 具体代码就不全部写上了. 关键的实现代码也比较简单. 只要监听ZFileChangedNotification并做出相应处理即可

- (void)viewDidLoad

{

[super viewDidLoad];

// 监听Document目录的文件改动

[[DirectoryWatcher defaultWatcher] startMonitoringDocumentAsynchronous];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fileChanageAction:) name:ZFileChangedNotification object:nil];

}

- (void)dealloc

{

// 取消监听Document目录的文件改动

[[DirectoryWatcher defaultWatcher] stopMonitoringDocument];

[[NSNotificationCenter defaultCenter] removeObserver:ZFileChangedNotification];

}

- (void)fileChanageAction:(NSNotification *)notification

{

// ZFileChangedNotification 通知是在子线程中发出的, 因此通知关联的方法会在子线程中执行

NSLog(@"文件发生了改变, %@", [NSThread currentThread]);

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSError *error;

// 获取指定路径对应文件夹下的所有文件

NSArray *fileArray = [fileManager contentsOfDirectoryAtPath:filePath error:&error];

NSLog(@"%@", fileArray);

}

让自己开发的iOS App通过iTunes共享文件到Document目录相关教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值