【问题标题】:Problems with directory deletion MFC目录删除MFC的问题
【发布时间】:2020-06-29 06:33:24
【问题描述】:

我正在做一个 mfc 程序,我在其中创建了一个目录来存储 dicom 图像使用

 CreateDirectory(Directory_name,NULL);

并成功创建文件夹, 之后我使用这个 dicom 图像文件夹来执行体积渲染,它也很顺利。

之后,当我尝试删除包含 dicom 文件的目录时,除了我提供给体积渲染过程的文件夹的最后一个 dicom 文件之外,所有内容都将被删除。 这是什么概念? 怎么删除?

【问题讨论】:

  • 大概文件还在使用中?
  • 是的。但是即使文件仍在使用中如何删除?
  • 您无法删除 Windows 上正在使用的文件

标签: c++ winapi visual-studio-2015 mfc


【解决方案1】:

在 Windows 下,您不能在文件打开时删除它。

如果您直接使用 Windows 功能,特别是使用CreateFile 打开文件,您可以将FILE_FLAG_DELETE_ON_CLOSE 传递给(很明显)每个文件在关闭后立即删除。

如果(更有可能)您使用几乎任何其他方式打开文件(iostreams、FILE *s、CFile 等),那么您几乎会被以下事实所困扰'需要先关闭文件,然后才能删除它们。如果文件在子进程中打开,您通常需要等待该进程完成并关闭文件,然后再尝试删除文件。

同样,您的选择在某种程度上取决于您如何创建子进程。如果您直接调用CreateProcess,您将获得子进程的句柄。该句柄将在子进程退出时发出信号,因此您可以在句柄上执行WaitForSingleObject 之类的操作,当它返回成功时,您就知道子进程已退出。大多数其他生成孩子的方法至少需要更多的迂回方法(并且,就像打开文件一样,使用其他方法比直接调用 CreateProcess 更常见 - 可以理解,因为直接使用 CreateProcess 可以有点痛)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2020-12-12
    • 2016-03-05
    • 1970-01-01
    相关资源
    最近更新 更多