// 当Documents内文件发生改变时,启动计时器,每秒计算一次大小,当大小不发生改变时说明传输完毕,就开始刷新。
@property (nonatomic, strong) NSTimer *timer;
// 原Documents内文件大小
@property (nonatomic, assign) NSInteger filesSize;
// Documents内文件改变后的大小
@property (nonatomic, assign) NSInteger foundSize;
- (NSTimer *)timer {
if (!_timer) {
_timer = [[NSTimer alloc] init];
[_timer setFireDate:[NSDate distantFuture]];
}
return _timer;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor]; _fileManager = [NSFileManager defaultManager];
self.timer = [NSTimer scheduledTimerWithTimeInterval:.f target:self selector:@selector(compareSize) userInfo:nil repeats:YES];
[self.timer setFireDate:[NSDate distantFuture]]; //** 监听Documents文件夹内的文件是否变化
int const folderdescriptor = open([kDocumentPath fileSystemRepresentation], O_EVTONLY);
dispatch_source_t _directorySource = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, folderdescriptor, DISPATCH_VNODE_WRITE, DISPATCH_TARGET_QUEUE_DEFAULT);
dispatch_source_set_event_handler(_directorySource, ^{
unsigned long const data = dispatch_source_get_data(_directorySource);
if (data & DISPATCH_VNODE_WRITE) {
// Do all the work on the main thread,
// including timer scheduling, notifications delivering
dispatch_async(dispatch_get_main_queue(), ^{
[self directoryDidChanger];
});
}
}); dispatch_source_set_cancel_handler(_directorySource, ^{
close(folderdescriptor);
}); dispatch_resume(_directorySource);
}
// 当Documengs文件夹内文件发送改变时
- (void)directoryDidChanger { _filesSize = [self getSizeOfFilePath:kDocumentPath]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.timer setFireDate:[NSDate date]];
}); } - (void)dealloc {
// 移除计时器
[self.timer invalidate];
}
// 获取所有文件
- (NSArray *)directoryFiles {
NSArray *files = [_fileManager subpathsAtPath:kDocumentPath];
return files;
}
// 比较文件大小,以此监听是否还在传输文件
- (void)compareSize {
_foundSize = [self getSizeOfFilePath:kDocumentPath]; if (_foundSize == _filesSize) { // 如果大小没有再发生改变则刷新数据
[self.timer setFireDate:[NSDate distantFuture]];
[self selectDate]; // 开始刷新数据
} _filesSize = _foundSize;
}

监听Documents文件夹内文件发生改变的更多相关文章

  1. python对文件夹内文件去重

    昨天无聊写了一个百度图片爬虫,测试了一下搜索"斗图".一下给我下了3000多个图片,关键是有一半以上重复的.what a fuck program ! 好吧,今天写一个文件去重功能 ...

  2. 个人永久性免费-Excel催化剂功能第83波-遍历文件夹内文件信息特别是图像、音视频等特有信息

    在过往的功能中,有体现出在Excel上管理文件的极大优势,在文件的信息元数据中,有图片和音视频这两类特有的属性数据,此篇对过往功能的一个补充,特别增加了图片和音视频信息的遍历功能. 使用场景 在文件管 ...

  3. C#获取文件夹内文件包括子文件(递归)实例

    这个在我工作上,写了一次工具项目,用上的. static ArrayList FileList = new ArrayList();//这个必须写在方法外, static ArrayList GetA ...

  4. Linux得到某个文件夹内文件的个数

    panonum=$(find . -type f | wc -l)

  5. Python win32com模块 合并文件夹内多个docx文件为一个docx

    Python win32com模块 合并文件夹内多个docx文件为一个docx #!/usr/bin/env python # -*- coding: utf-8 -*- from win32com. ...

  6. ftp下载目录下所有文件及文件夹内(递归)

    ftp下载目录下所有文件及文件夹内(递归)   /// <summary> /// ftp文件上传.下载操作类 /// </summary> public class FTPH ...

  7. Linux如何修改文件/文件夹内所有文件的权限

    一.修改文件权限 修改文件权限前,需要了解一下权限中的”rwx”与数字的对应关系,其中r=4,w=2,x=1. 例如:”drwxr-xr-x”,第一个”d”是代表文件夹,这里不用考虑,后面九个字符,每 ...

  8. Linux批量替换文本,文件夹内所有文本内容

    1.替换文件夹内所有文件匹配的字符串 sed -i "s/旧内容/新内容/g" `grep 旧内容 -rl 文件夹路径` 例如将/var/www/test文件夹下的所有文件内容中的 ...

  9. 用Python来实现列举某个文件夹内所有的文件列表

    用Python来实现列举某个文件夹内所有的文件列表.吾八哥我动手写代码之前分析了下,遍历一个文件夹,肯定是需要用到os模块了,查阅模块帮助信息,可知os.listdir()方法可以列举某个文件夹内的所 ...

随机推荐

  1. JavaWeb HTML

    1. HTML介绍 1.1. 什么是HTML HTML的全称为Hyper Text Markup Language,译为超文本标记语言. 超文本,就是指页面内可以包含图片.链接,甚至音乐.程序等非文字 ...

  2. ThinkPHP开发博客系统笔记之二

    1. 登陆验证码 当用户登陆的时候我们希望也弹出验证码,有两种方法可以实现:一是再增加一个弹出验证码的dialog,二是和注册共用一个验证码dialog.第一种方法有大量重复代码,所以我们使用第二种方 ...

  3. Spring Cloud 微服务开放平台接口

    github源码地址:https://github.com/spring-cloud/spring-cloud-security 前言: 什么是开放平台接口 场景 : 总公司与子公司 对接接口  还有 ...

  4. 调用webservices中 枚举类型没有被序列化问题

    引用服务后,代理类为自动为所有枚举类型生成了一个Bool类型相关字段,命名方式:比如枚举类名为“PayType”,生成的相关字段为“PayTypeSpecified”,此字段有何作用? PayType ...

  5. Dev控件-gridview的属性说明

    说明 Options OptionsBehavior 视图的行为选项 AllowIncrementalSearch 允许用户通过输入想得到的列值来定位行 AllowPartialRedrawOnScr ...

  6. linux 安装unrar

    Centos 6 32位下安装 wget http://pkgs.repoforge.org/unrar/unrar-4.2.3-1.el6.rf.i686.rpmrpm -ivh unrar-4.2 ...

  7. excel 拖拽计算时,固定一个数

    $ 表示静态引用(也叫绝对引用)的意思.即固定引用的单元格的行或列. $A1即固定列为A,$A$2即固定引用为A列2行的单元格. A$3则只固定引用为第三行. 我们在使用excel拖拽计算时,常遇到这 ...

  8. ceph 测试

    FIO用法: 随机读: fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16 ...

  9. 【51nod-1605】棋盘问题

    上帝创造了一个n*m棋盘,每一个格子都只有可能是黑色或者白色的. 亚当和夏娃在玩一个游戏,每次寻找边长为x的正方形,其中每个格子必须为黑色,然后将这些格子染白. 如果谁不能操作了,那么那个人就输了. ...

  10. docker 创建镜像,并推送到私有仓库

    创建镜像 创建  Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...