CFileDialogのファイルアクセスについて – プログラミング – Home

CFileDialogのファイルアクセ...
 
通知
すべてクリア

[解決済] CFileDialogのファイルアクセスについて


きゃん
 きゃん
(@きゃん)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

初めまして。
きゃんと申します。

開発環境 : MFC, VC++

CFileDialogで「ファイルを開く」ダイアログを作成しているのですが、下記手順で処理
を実行すると、ボリュームロックができなくなります。

1.ダイアログでファイルを選択し、「開く」ボタンを押下する。
2.選択したファイルのデバイスをオープンする。
3.選択したファイルのデバイスをロックする。
(DeviceIoControlのFSCTL_UNLOCK_VOLUMEを発行)

ここで、ロックに失敗します。(GetLastError()→5)
「ファイルを開く」ダイアログを使用しない場合はロックに成功しているので、
ダイアログからファイルにアクセスした後に、何か問題があるのではと思うのですが、
調べても後処理が必要とは思えず、どうしていいか困っています。
API(GetOpenFileName)を使っても結果は同じでした。

CFileDialogを使用すると、選択したファイルにアクセスし続けてしまうのでしょうか?
何かご存知の方、いらっしゃいましたら教えていただきたく。
よろしくお願いします。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

カレントディレクトリがそこ=開いたディレクトリに移るためだと思われます。


返信引用
きゃん
 きゃん
(@きゃん)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

tetrapodさん、ありがとうございます。

> カレントディレクトリがそこ=開いたディレクトリに移るためだと思われます。

その通りでした。
今回は、
・ダイアログで開くファイルは、確実に起動ディレクトリがあるドライブとは異なる。
・ボリュームロックしたいのは開いたファイルが存在するドライブのみ。
という前提があるため、
ファイル参照前のカレントディレクトリ(=起動ディレクトリ)を取得しておき、
ファイル参照後にカレントディレクトリを元に戻すことで対応できました。
本当にありがとうございました。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ファイルアクセスをフルパスで行うのであれば、
OFN_NOCHANGEDIRを指定してファイルダイアログを開くだけでも良さそうな気がします。


返信引用
きゃん
 きゃん
(@きゃん)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

PATIOさん、回答ありがとうございます。

> ファイルアクセスをフルパスで行うのであれば、
> OFN_NOCHANGEDIRを指定してファイルダイアログを開くだけでも良さそうな気がしま
す。

上記の方法でも大丈夫でした。
CFileDialogを使用すると、ファイル参照時にはカレントディレクトリが移動するものと
思い込んでいました。
カレントディレクトリを戻すよりスマートなので、OFN_NOCHANGEDIRを使うことにしま
す。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました