2017-05-03 6 views
0

ログファイル(例:C:/temp/file.txt)を継続的に読み取るC++プログラムがあります。しかし、プログラムが実行されている間、私は、監視されているファイルを含むフォルダ( 'temp')を削除/名前変更できるようにしたい。ファイルを含むフォルダをロックせずに、WindowsのファイルをC++で読み取ることはできますか?

現在、私はCreateFile()を使用しています。方法はあり

「その中にフォルダやファイルが別のプログラムで開いているため、アクションを完了できない」 :

 CreateFile(
        szFilename, 
        GENERIC_READ, 
        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 
        NULL, 
        OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL, 
        NULL) 

は、私は、フォルダの名前を変更/削除したときに次のエラーを取得しますそれをロックせずにファイルを読み書きするには?

+0

途中です。あなたがフォルダ内の読み込みのためにファイルを開いていれば、誰も 'DELETE'アクセスでこのフォルダを開くことができません。これは名前の変更/削除に必要です – RbMm

答えて

3

CreateHardLinkWを使用してこのファイルへのハードリンクを作成し、元のファイルの代わりに開くことができます。こうすることで、元のファイル(実際にはハードリンクでもあります)とそれを含むフォルダの名前を変更/削除できますが、ファイル自体にはまだアクセスできます。このメソッドは、基礎となるファイルシステムのタイプ、ハードリンクの場所、アクセス権にいくつかの制限があることに注意してください。

関連する問題