boost::remove_all 删除非空目录 , 拒绝访问

12 篇文章 0 订阅

转载地址: http://blog.51cto.com/yaocoder/805054

习惯了进行跨平台的编程,而且想找个代码量小的,于是就使用了boost库remove_all。单元测试完成后集成入程序,...之后交予测试。在测试的过程中偶尔会遇见文件夹删不掉的情况,而且从boost捕获的异常来看是某个文件拒绝访问。于是猜测一定是文件资源被占用了,因为我们这个程序有很多地方对文件进行操作,所以一直怀疑是其他操作模块未释放此文件资源,但是在进行了仔细的代码审查后未发现资源占用问题,再用Filemon和unlock软件查看这个文件均未显示有占用情况(而且手动删除却能正常删除)。于是,开始怀疑boost库的适用问题,于是就写了以上windows api和shell的删除目录实现,经过测试对于DeleteFile来说仍然对这个文件提示拒绝访问,但是用SHFileOperation却删除了这个文件及目录。心中不免产生了大大的疑问,这是怎么回事?


       开始再次仔细查看这几个方法的官方文档。真没看到有任何能够解释这个问题的条目。真没想到啊,竟然要栽在这么一个小功能上了。但是无意的一个右键查看文件属性却让自己彻底崩溃了,“shit”, 这些文件的属性是只读的,修改属性后boost和windows api都能正常删除了。

boost::asio::high_resolution_timer是一个定时器类,用于在boost::asio库中进行高分辨率的定时操作。 boost::asio库是一个用于网络和异步编程的C++库。它提供了丰富的功能,包括异步IO操作、定时器、socket通信等。其中,boost::asio::high_resolution_timer是其中的一个定时器类,它使用了高分辨率的时钟来进行精确的定时操作。 使用boost::asio::high_resolution_timer,我们可以创建一个定时器对象,并设置定时的时间间隔。可以使用成员函数expires_from_now()指定定时的时间间隔,参数为一个duration类型的对象,表示时间间隔的长度。 例如,以下代码创建了一个定时器对象timer,设置了定时时间间隔为1秒: boost::asio::high_resolution_timer timer(io_context); timer.expires_from_now(boost::posix_time::seconds(1)); 然后,我们可以调用定时器对象的async_wait()函数来启动定时器,并指定一个回调函数,在定时器超时时被调用。回调函数可以是一个lambda函数,也可以是一个函数对象。 例如,以下代码定义了一个lambda函数作为回调函数: timer.async_wait([](const boost::system::error_code& ec) { if (!ec) { // 定时器超时,执行相应操作 } }); 在定时器超时时,回调函数会被触发,并执行相应操作。 总之,boost::asio::high_resolution_timer是一个用于高分辨率定时操作的定时器类,可以帮助我们在异步编程中进行精确的定时操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值