|
1
18
首先重命名要删除的文件,然后将其删除。
使用
当然,如果您的分析是正确的,并且文件操作在某种程度上是异步的,那么这可能会导致您在重命名之前尝试删除文件的问题。但是你可以一直尝试在后台线程中删除。 如果Hans是对的(我倾向于相信他的分析),那么移动可能没有真正的帮助,因为您可能无法实际重命名另一个进程打开的文件。(但你可能会,我不知道这个。)如果真是这样,我唯一能想到的办法就是“继续努力”。您必须等待几毫秒,然后重试。保持一个暂停,当这没有帮助时放弃。 |
|
2
22
Windows中还有其他进程需要该文件的一部分。搜索索引器是一个明显的候选者。或者病毒扫描器。他们将打开文件进行完全共享,包括文件共享和删除,这样其他进程就不会受到他们打开文件的严重影响。
否则,这是多任务操作系统上的一个常见问题,您无法知道其他进程可能会对您的文件造成什么影响。你的使用模式似乎不寻常,先回顾一下。一个解决方法是捕捉错误,睡眠,然后再试一次。或者使用SHFileOperation()将文件移动到回收站。 |
|
3
5
愚蠢的建议-因为它很少失败,所以只需在失败时等待几毫秒,然后再试一次。 或者,如果延迟很重要,请切换到另一个文件名,让旧文件稍后删除。 |
|
4
4
这也许不是你的问题,但有可能,所以我建议你离开 Process Monitor (Sysinternals)并参见。
我也有同样的问题
Comodo Internet Security
(
如您所见,有一个删除请求,然后多次尝试按再次打开该文件
当然,建议的解决方案是等待并重试,而且效果很好。 |
|
5
4
|
|
6
3
照顾 关于文件名是什么。如果真是这样,你应该考虑创建一个 照顾 文件还没有被删除。 |
|
7
2
实际上,我在使用LoadLibrary时也遇到了同样的问题( 路径 ). 我无法删除中的文件 路径 解决方法是“关闭句柄”或使用FreeLibrary( 路径 注:请阅读 MSDN 关于FreeLibrary()。 |
|
8
1
在WindowsVista/Windows7上 DeleteFileTransacted 另一种方法是使用带有\u CREATE标志的OpenFile(),如果文件存在,则将长度设置为零;如果文件不存在,则创建长度;然后调用文件句柄上的FlushFileBuffers,等待此操作(使文件长度为零)完成。完成时,文件大小为0,然后只需调用DeleteFile。 您可以稍后测试文件是否存在,或者它的长度是否为零,以相同的方式处理它。 |
|
9
1
|
|
10
1
given by sbi ,但出于完整性的考虑,有些人可能还想知道Windows10RS1/1603中提供的一种新方法。
|
|
11
1
如果CreateFile返回无效的\u HANDLE \u值,那么您应该确定在特定情况下(挂起的删除)GetLastError返回什么,并仅基于该错误代码循环回CreateFile。 文件标志\u DELETE \u ON \u CLOSE标志可能会为您买些东西。 |
|
|
12
1
我刚吃了这个
准确的
采取了两个步骤来解决这个问题;
我停止使用C/C++ STDLIB API
以上是显示相关标志的伪调用,请特别注意,在用于实现的CreateFile调用上没有共享 删除 和 删除 语义学。 他们现在正在我的代码中工作,并且提高了精度和其他线程/进程的控制(监视文件系统的更改)由于其他重命名和/或删除api中的延迟[或共享]而对文件执行插入操作。如果没有这个控件,在最后一个内核句柄关闭时设置为删除的文件实际上可能会一直处于打开状态,直到系统重新启动,而且您可能不知道。
附录: 我所做的一部分工作碰巧使用了硬链接。结果表明,尽管可以在打开的文件上创建硬链接,但在关闭该NTFS文件的任何底层数据流的所有句柄之前,不能删除任何硬链接。这很奇怪,因为:
这会让你觉得只有 最后的 当内核有一个或多个引用硬链接NTFS文件的MFT条目/ATTRs的打开文件句柄时,硬链接应该是不可删除的。 总之,还有一件事要知道。 |
|
13
-2
我认为这只是由于文件系统设计不好造成的。我在使用通信端口时也遇到过同样的问题,打开/关闭它们。
我更喜欢重叠I/O,但是
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |