簡単な質問で申し訳ございませんがよろしくおねがいします。
SaveDialogを使ってライトプロテクトがかかっているディスクにデータを保存しようとしたとき、ウインドウズのメモ帳のように「ライトプロテクトされています」とかメッセージを出したいのですが、どうすればよろしいでしょうか?
標準だと、上書き保存しようとした場合にのみこのようなメッセージがでますが、上書き保存でない場合もこれを出したいのです。
以前、こちらでお答えいただいたものを参考にやってみましたが、私の力不足でうまくいきませんでした。
お手数ですが、よろしくお願いします。
以前のやり方はわかりましたか?
あのやり方だと、readonlyなのか、writeprotectedなのか判断できませんが、少なくとも「上書き保存でない新規の保存」でも動くはずです。
もしわからないのであれば、そちらを片づけて出なければ、この問題は解決できないでしょう。
そこまでできている上での回答です。
ライトプロテクトか、readonlyなのかの判別は、単純な条件分岐です。
以下は、notepadの場合です。
1.読み取り専用属性かどうか調べる
2.ディレクトリに保存するアクセス許可があるか調べる
3.ライトプロテクトが施されているか調べる
となります。
# 2,3は予想です。詳しくは調べていません
2については調べていないのでわかりません。
作りやすくするために、次のような調べ方になると思います。
1.読み取り専用属性か調べる
2.ライトプロテクトが施されているか調べる
3.ファイルが作成できるか調べる
1は、FindFirstなどで検索して、その結果から調べることができます。
2は、リムーバブルドライブのドライブかどうかを調べ、そのドライブをCreateFileで書き込みモードで開けるか調べます。
3は、単純にファイルを作ってみて、失敗すれば作成できないと判断します。
再度の早々としたレス、本当にありがとうございます。
それで、頂いたお答えについてなのですが、1は既に処理の中に組み込んでおり、FileIsReadOnly関数(またはSaveDialogのオプション)で条件判定しています。
あと、3については一応考えていましたが、ファイルを実際に作成すると、CD−Rのような書き込み専用メディアにファイルを保存する場合、ごみがディスクに残ってしまうのではないかと考えたため、ちょっとためらってしまいました。
2については、まだよく分かっていません。頂いたヒントを元にもう一度考えてみたいと思います。どうもありがとうございました。
*一応自分では、以下のような処理手順で考えています。
1.ファイルが存在する →読取専用→終了
2. 同上 →読取専用でない→上書き確認→保存
3.ファイルが存在しない→保存
*ファイルを作成できなかった場合は例外処理で「作成できません」メッセージ。
この手順だと、ライトプロテクトしているフロッピーの、読取専用でないファイルに上書き保存しようとした場合、「上書きしますか」の後でないとエラーメッセージ「作成できません」が表示されないため、ウインドウズ付属のメモ帳のように、最初からエラーを表示させることができない状況です。
SaveDialogに任せずに、自前で書いてみてはどうですか?
単純にファイルが存在したら「上書きしますか?」と聞くだけですし。
SaveDialogに任せるとしたら、
1.Execute
2.ファイルを選択して、保存ボタン押下
3.メッセージ「上書きしますか?」
4.CanCloseイベント
となります。
3と4は逆の方が自然だと思います。
# つまり、3もCanCloseイベント内で処理させる
ツイート | ![]() |