File.Copy then FIle.Delete IOError

博客给出了解决文件路径访问被拒绝问题的代码。通过判断文件是否存在,若存在则获取文件访问控制,添加访问规则,设置文件属性为正常,最后尝试删除文件,若出现异常则进行捕获处理。

    if (File.Exists(destFileName))
      {
        try
        {

          FileInfo fileInfo = new FileInfo(destFileName);
          System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();
          fileSecurity.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule("Everyone", System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow));

           fileSecurity.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule("Users", System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow));

          fileInfo.SetAccessControl(fileSecurity);

          fileInfo.Attributes = FileAttributes.Normal;//this is the real issue

          fileInfo.Delete();

          //File.Delete(destFileName);
        }
        catch (Exception ex)
        {

        }
      }

### 关于 `shutil.copy` 的常见错误及其解决方法 #### 文件路径不存在 当源文件路径或目标文件路径不正确时,会引发 FileNotFoundError 或 IOError。 ```python import shutil try: shutil.copy('source_file_path', 'destination_file_path') except FileNotFoundError as e: print(f"File not found: {e}") ``` 确保提供给 `shutil.copy` 函数的源文件路径和目标文件路径是有效的[^1]。 #### 权限不足 尝试复制到受保护的位置或读取权限受限的文件可能会导致 PermissionError。 ```python import os import shutil if os.access('source_file_path', os.R_OK) and os.access(os.path.dirname('destination_file_path'), os.W_OK): shutil.copy('source_file_path', 'destination_file_path') else: print("Permission denied or path is invalid.") ``` 验证当前程序有足够的权限访问指定的源文件并写入目标位置[^2]。 #### 符号链接处理不当 默认情况下,`follow_symlinks=True` 参数会使 `shutil.copy` 复制实际文件而不是符号链接本身。如果不希望跟随符号链接,则应设置此参数为 False。 ```python shutil.copy('source_link_or_file', 'destination', follow_symlinks=False) ``` 对于更复杂的目录结构复制需求,可以考虑使用 `shutil.copytree()` 方法来保留整个树状结构的同时控制如何处理符号链接[^3]。 #### 并发操作冲突 在同一时间执行多个并发的文件复制任务可能导致数据损坏或其他未定义行为。为了避免这种情况,在多线程环境中应当小心管理资源锁定机制或者采用异步的方式进行文件传输[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值