问题标签 [movefileex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2154 浏览

winapi - 带有 MOVEFILE_DELAY_UNTIL_REBOOT 的 MoveFileEx 删除而不是移动

我有一个自动更新系统,可以在重新启动时替换我现有的程序文件。(可以说,这是一个非常复杂的程序,包含许多驱动程序、服务和用户级模块。真的没有其他办法。相信我。)

函数 MoveFileEx 与 MOVEFILE_DELAY_UNTIL_REBOOT 一起使用来设置此文件替换。我发现它正常工作。但是,如果源文件和目标文件位于不同的驱动器上,则会删除目标文件但不会移动源文件。结果是当用户在不同于系统分区的驱动器上安装软件时,更新会删除产品文件而不是更新它们。

现在,我在 MoveFileEx 的文档中看到 MOVEFILE_COPY_ALLOWED 应该在将文件从一个卷移动到另一个卷时使用。但它也表示该标志不能与 MOVEFILE_DELAY_UNTIL_REBOOT 一起使用。

问:当源和目标不在同一个卷上时,如何在重新启动时移动文件,覆盖现有文件?

0 投票
1 回答
259 浏览

privilege - MoveFileEx() 使用的权限

当调用 MoveFileEx() 并为 dwFlags 使用 MOVEFILE_DELAY_UNTIL_REBOOT 时。在文件的实际移动过程中,它使用什么权限?

谢谢加佐!

0 投票
2 回答
2786 浏览

c# - 使用 MoveFileEx 标记要删除的文件

我在让 MoveFileEx 在 Windows 7 x64 中正常工作时遇到了一些麻烦。

我以管理员身份运行我的应用程序,将文件标记为在下次重新启动时删除,但重新启动后发现没有文件被删除。

我正在使用以下内容来完成上述壮举:

我可以验证标记过程正在多个文件上完成,只是无法弄清楚为什么在机器重新启动后它没有执行删除功能。

在这方面的任何帮助将不胜感激。

谢谢你。

0 投票
0 回答
1000 浏览

winapi - 递归移动文件/复制文件

我正在开发一个控制台程序,需要使用MoveFile/CopyFile来允许移动和复制文件和目录(可能跨卷)。当然,问题在于将目录复制或移动到另一个卷不适用于上述功能,因为它们不是递归的。

SHFileOperation不会这样做,因为这是一个控制台应用程序,我正在使用允许进度显示 ( MoveFileWithProgress/ CopyFileEx) 的变体,并SHFileOperation使用 GUI 而不是控制台来显示进度。

我考虑过使用FindNextFile,但即便如此,我也找不到任何可以递归(Move|Copy)File使用FindNextFile或以其他方式使用的代码示例——这有点令人费解,因为这个问题之前肯定已经出现过。

有没有一种简单的方法可以做到这一点,还是我必须求助于重新发明轮子?

0 投票
2 回答
1941 浏览

c++ - MoveFile() Works, but returns error 2 (file not found)

I'm using the function Movefile() (in C). I can see the file moved from the source folder to the destination (means the MoveFile success) but when I do GetLastError() I get error no. 2 (ERROR_FILE_NOT_FOUND).

What can be the problem?

The code is:

0 投票
2 回答
2505 浏览

winapi - ReplaceFile Windows API 只是一个便利功能吗?

ReplaceFileWindows API 只是一个便利功能,还是它实现的功能超出了可以通过多次调用来编码的功能MoveFileEx

我目前处于需要的情况

  1. 写一个临时文件,然后
  2. 将此临时文件重命名为原始文件名,可能替换原始文件。

我考虑过使用MoveFileExwith MOVEFILE_REPLACE_EXISTING(因为我不需要备份或任何东西),但也有ReplaceFileAPI,因为它在Alternatives to TxF下提到。

这让我想到:ReplaceFile真的有什么特别的,还是只是一个方便的包装MoveFile(Ex)

0 投票
2 回答
1916 浏览

c# - 重启时删除非空文件夹

Users从域中删除用户后,我试图删除文件夹中的用户配置文件文件夹。问题是有时系统可能正在使用该文件夹。

问题是使用MOVEFILE_DELAY_UNTIL_REBOOTwithMoveFileEx只会删除空文件夹。

从 MSDN

如果dwFlags指定MOVEFILE_DELAY_UNTIL_REBOOT并且lpNewFileNameNULL,则 MoveFileEx 注册lpExistingFileName文件以在系统重新启动时删除。如果lpExistingFileName引用一个目录,则系统仅在目录为空时才会在重新启动时删除该目录。

删除其中包含正在使用的文件的非空文件夹的正确方法是什么?


这是一个基于 Michel 答案的简单测试程序,它按预期工作。

我在两个循环中执行此操作Directory.EnumerateFilesDirectory.EnumerateDirectories因为Directory.EnumerateFileSystemEntries将在文件夹中的文件之前列出文件夹,因此删除将失败。

0 投票
1 回答
2478 浏览

c++ - MoveFileEx - 返回 GetLastError(): 17

我正在使用 MoveFileEx 移动文件。根据用户输入的内容,文件移动的位置可能位于单独的硬盘驱动器上。在这种情况下,MoveFileEx 失败,GetLastError 报告错误 ID 17,即:

ERROR_NOT_SAME_DEVICE 17 (0x11) 系统无法将文件移动到不同的磁盘驱动器。( http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx )

那么,在 VC++ 中,我将如何处理这样的情况,并移动文件,即使它位于单独的硬盘驱动器上?

我正在使用的代码在这里:https://gist.github.com/Whitetigerswt/9180030(虽然我认为它不相关,但除了将文件移动到另一个硬盘驱动器外,一切都很好。)

0 投票
1 回答
13013 浏览

delphi - 将源目录中的所有内容复制到新目录 Delphi EX7

我的最终目标是将所有相关文件从一个文件夹复制到另一个文件夹。所以例如我们有C:\Users\Tool\Desktop\test\oldStuff。在文件夹oldStuff中,我们有更多文件夹以及一些mp3mp4txt文件。

现在我想做的是将所有小于 GB的mp4文件复制到.mp4C:\Users\Tool\Desktop\test\New_Stuff_Less_than_a_Gig文件,将大于 GB的.mp4文件复制到.C:\Users\Tool\Desktop\test\New_STuff_Bigger_than_a_Gig

我虽然这很容易,但我错了。到目前为止有这个,暂时不用担心文件类型所以就做了*.*

这将复制所选文件夹中的任何内容,但不会从所选文件夹中的文件夹中复制任何内容。例如,如果我们拥有C:\Users\Tool\Desktop\test\oldStuff\movie.mp4它将复制Movie.mp4文件,但如果我们拥有C:\Users\Tool\Desktop\test\oldStuff\movies\Movie.mp4它将不会复制Movie.mp4文件。我虽然我可以做这样的事情

甚至只是

但它没有复制任何东西。

0 投票
0 回答
142 浏览

windows - MoveFileEx 添加后从 Windows 注册表中删除记录

在我的软件中,我MoveFileEx用来标记要删除的文件,以便在系统重新启动时删除。

在这种情况下,由于某些原因我无法使用我的软件删除文件(例如它被其他软件锁定)。

但我假设系统可能会崩溃,或者其他意外情况可能会重新启动系统,我希望能够删除文件或将其标记为删除MoveFileEx

现在我打算在软件开始使用后立即用 MoveFileEx 标记文件。

我有三个问题:

  1. 是否有一个功能(我可以使用)从 Windows regestry 中删除特定文件的记录?

    情况是:我将文件标记为在系统重新启动时删除,使用它并成功删除它 - 然后我的注册表中不需要此记录,我不希望有成功删除文件的记录。(可能数百万成功删除和 5-10 不成功)。

  2. 如果没有这样的功能(在问题“1”中提到),在我的注册表中有数百万不需要的记录会有多大的问题?

  3. 如果问题 2 的答案是否定的,还有其他解决方案吗?