問題タブ [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では使用できないことも示しています。

Q:ソースとターゲットが同じボリューム上にない場合、再起動時にファイルを移動して既存のファイルを上書きするにはどうすればよいですか?

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

私はコンソール プログラムに取り組んでおり、MoveFile/CopyFileを使用して、ファイルとディレクトリを移動およびコピーできるようにする必要があります (おそらくボリューム間で)。もちろん問題は、ディレクトリを別のボリュームにコピーまたは移動することは、再帰的ではないため、前述の機能では機能しないことです。

SHFileOperationこれはコンソール アプリであり、進行状況表示 ( MoveFileWithProgress/ CopyFileEx)を許可するバリエーションをSHFileOperation使用しており、コンソールの代わりに進行状況を表示するために GUI を使用しているため、実行できません。

を使用することを検討しましたが、再帰的FindNextFileに使用するコードの例を見つけることができませんでした。(Move|Copy)FileFindNextFile

これを行う簡単な方法はありますか、それとも車輪の再発明に頼る必要がありますか?

0 投票する
2 に答える
1941 参照

c++ - MoveFile()は機能しますが、エラー2を返します(ファイルが見つかりません)

私は関数Movefile()(C)を使用しています。ファイルがソースフォルダーから宛先に移動されたことがわかります(MoveFileが成功したことを意味します)が、GetLastError()を実行すると、エラー番号が表示されます。2(ERROR_FILE_NOT_FOUND)。

何が問題になる可能性がありますか?

コードは次のとおりです。

0 投票する
2 に答える
2505 参照

winapi - ReplaceFile Windows API は便利な機能のみですか?

Windows APIはReplaceFile便利な関数だけですか?それとも、複数の呼び出しを使用してコード化できる以上のことを実現しMoveFileExますか?

私は現在、私が必要な状況にあります

  1. 一時ファイルを書き込んでから
  2. この一時ファイルの名前を元のファイル名に変更し、元のファイルを置き換える可能性があります。

(バックアップなどは必要ないため)MoveFileExwithを使用することを考えましたが、 APIもありますMOVEFILE_REPLACE_EXISTINGReplaceFile

これは私に考えさせました:ReplaceFile実際には何か特別なことをしますか、それとも単なる便利なラッパーMoveFile(Ex)ですか?

0 投票する
2 に答える
1916 参照

c# - 再起動時に空でないフォルダーを削除する

ドメインからユーザーを削除した後、フォルダー内のユーザー プロファイル フォルダーを削除しようとしてUsersいます。問題は、フォルダがシステムによって使用されている場合があることです。

MOVEFILE_DELAY_UNTIL_REBOOTwithMoveFileExを使用すると、空のフォルダーのみが削除されるという問題があります。

MSDN から:

dwFlagsがMOVEFILE_DELAY_UNTIL_REBOOTを指定し、lpNewFileNameNULLの場合、MoveFileExは、システムの再起動時に削除されるlpExistingFileNameファイルを登録します。lpExistingFileNameがディレクトリを参照している場合、ディレクトリが空の場合にのみ、システムは再起動時にディレクトリを削除します。

使用中のファイルが含まれている空でないフォルダを削除する正しい方法は何ですか?


Michel の回答に基づく簡単なテスト プログラムを次に示します。期待どおりに動作します。

Directory.EnumerateFilesこれをandを使用して 2 つのループで実行すると、フォルダ内のファイルの前にフォルダがリストされるため、削除は失敗しますDirectory.EnumerateDirectoriesDirectory.EnumerateFileSystemEntries

0 投票する
1 に答える
13013 参照

delphi - ソース ディレクトリからすべてを新しいディレクトリ Delphi EX7 にコピーします

私の最終目標は、関連するすべてのファイルをあるフォルダーから別のフォルダーにコピーすることです。たとえば、 がありC:\Users\Tool\Desktop\test\oldStuffます。フォルダoldStuffには、いくつかのmp3mp4、およびtxtファイルだけでなく、さらに多くのフォルダがあります。

ここで、1 GB より小さいすべてのmp4C:\Users\Tool\Desktop\test\New_Stuff_Less_than_a_Gigファイルを にコピーし、1 GB より大きい.mp4C:\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 でマークすることを計画しています。

3 つの質問があります。

  1. 特定のファイルの Windows レジストリからレコードを削除する機能 (使用できる) はありますか?

    ケース: システムの再起動時にファイルを削除するようにマークし、それを操作して正常に削除します-その後、レジストリにこのレコードは必要なく、正常に削除されたファイルのレコードを保持したくありません. (おそらく数百万が正常に削除され、5-10 が失敗しました)。

  2. そのような機能 (質問 '1' で言及) がない場合、私のレジストリに何百万もの不要なレコードがあると、どのくらいの問題になるでしょうか?

  3. 質問 2 の答えが非常に否定的である場合、これに対する他の解決策はありますか?