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都能正常删除了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 如果你在使用`os.remove`时遇到了拒绝访问的问题,这可能是因为文件或目录被其他程序占用或者你没有足够的权限来删除它们。 你可以尝试以下方法: 1. 确保文件或目录不被其他程序占用,关闭相关程序后再尝试删除。 2. 以管理员身份运行你的 Python 程序,这样你就可以获得足够的权限来删除文件或目录。 3. 使用`os.chmod`更改文件或目录的权限,使其可写,然后再尝试删除。 如果以上方法都不起作用,可能是其他问题导致的。请提供更多的上下文信息,以便更好地帮助你解决问题。 ### 回答2: os.remove拒绝访问通常是因为操作系统的权限限制所导致的。在许多操作系统中,文件文件夹都有特定的权限设置,控制着对它们的访问和操作。当我们调用os.remove函数删除一个文件时,操作系统首先会检查当前用户的权限,以确定是否允许删除文件。 如果当前用户没有足够的权限来删除文件,操作系统会拒绝访问,并抛出一个权限拒绝的错误。这通常发生在以下几种情况下: 1. 文件被其他程序或进程占用:如果另一个程序正在使用该文件,或者该文件正在被其他进程打开,则操作系统会拒绝删除操作。在这种情况下,我们需要先确保文件未被其他程序使用,然后再尝试删除。 2. 文件文件夹的权限设置不允许删除操作:在某些情况下,文件文件夹的权限设置可能不允许当前用户执行删除操作。这些权限设置通常由文件所有者或管理员配置,并且可能需要管理员权限才能修改。要解决此问题,我们需要通过更改文件的权限或联系管理员来获得足够的权限。 3. 操作系统或文件系统的限制:某些操作系统或文件系统可能存在特定的限制,限制某些目录或文件删除操作。这可能是由于操作系统的保护机制或其他限制导致的。在这种情况下,我们需要查阅相关文档或联系操作系统供应商以获取更多信息。 为了解决"os.remove拒绝访问"的问题,我们可以采取以下措施: 1. 以管理员身份运行程序:如果用户权限不足以删除文件,我们可以尝试以管理员身份运行程序。管理员权限通常具有更高的权限级别,可以执行更多的操作。 2. 关闭其他程序或进程:如果文件被其他程序或进程占用,我们需要先关闭这些程序或进程,以释放对文件的占用,然后再进行删除操作。 3. 修改文件的权限:如果文件的权限设置不允许删除操作,我们可以尝试修改文件的权限,赋予当前用户足够的权限来执行删除操作。 请注意,根据不同的操作系统和具体的情况,解决这个问题的方法可能会有所不同。因此,在遇到"os.remove拒绝访问"的问题时,我们需要仔细分析具体情况,并根据实际情况采取相应的措施。 ### 回答3: os.remove函数是Python中用于删除文件的方法之一。它会尝试删除指定路径文件。如果在删除文件时出现"拒绝访问"的错误,通常有以下几种可能的原因: 1. 权限问题:操作系统可能没有足够的权限来删除文件。例如,如果该文件是在受限的文件夹中,当前用户可能没有足够的权限来删除文件。解决此问题的一种方法是以管理员身份运行Python脚本,这样可以获得足够的权限来删除文件。 2. 文件正在使用中:如果文件当前正在被其他程序或进程使用,操作系统会拒绝删除文件。在删除文件之前,要确保没有其他程序正在使用该文件,可以通过关闭相关程序或进程来解决此问题。 3. 文件不存在:如果指定路径文件不存在,那么os.remove()函数也会报错,显示"拒绝访问"。在删除文件之前,要确保文件路径是正确的,并且确保文件实际存在。 总之,当os.remove函数返回"拒绝访问"的错误时,需要检查文件的权限、是否被使用以及文件路径的正确性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值