アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

現在、ListViewにドラッグ&ドロップで様々なファイル名を格納し、ボタンクリックイベントで規定のディレクトリにコピーする機能を作成しております。

その中で、ListView内のファイル名をダブルクリックすると読み取り専用で開かれるようにしたいのですが、

現ロジック--------------------------------------------------
CreateObject("Shell.application").ShellExecute(ファイル名)
-----------------------------------------------------------

上記の書き方だと、確かに開くのですが読み取り専用という指定がないため、簡単に上書きできてしまいます。

読み取り専用にするには、どこで指定すべきでしょうか?

よろしくお願いいたします。

A 回答 (1件)

その1。

簡単だが問題がある方法

1.ファイル属性を取得する。
2.ファイル属性に「読み取り専用」を付加する。
3.現在のロジックでファイルを開く。
4.閉じられたら、ファイル属性を1で取得した属性に戻す。

長所
ファイル属性の取得と変更のみで実装可能。

問題点
・4の作業が行われないままプログラムが強制終了したり、PCをリセットしたりすると、オリジナルファイルの「読み取り専用」が残ってしまう。

・開く際に起動されるアプリケーションが任意で自由な為に「読み取り専用属性が付いたファイルを開こうとすると、エラーになったり、開かずに無視してしまうアプリケーション」が存在する可能性がある。

・アプリケーションによっては、読み取り専用の属性が付いていたら、警告を出すだけで読み取り専用を無視して上書きしてしまう物がある。

・ファイルの属性を変更出来る権限が無いと、うまく動かない。

その2。複雑だが確実な方法

1.システムの「一時ファイル」のフォルダ位置を取得する。
2.そのフォルダに開きたいファイルをコピーする。
3.コピー先ファイルの「読み取り専用」の属性は解除しておく。
4.現在のロジックで「一時ファイルのフォルダにコピーした複製ファイル」を開く。
5.閉じられたら、コピー先ファイルを削除する。

長所
・元ファイルは「コピー元として読むだけ」なので、アプリケーションで何をされようが影響を受けない。上書きされたって平気。

・5の作業が行われないままプログラムが強制終了したり、PCをリセットしたりしてファイルが残っても、ディスクのクリーンアップなどで「一時ファイルフォルダを掃除出来る」ので、事後処理が楽。

問題点
・開きたいファイルが巨大な場合、コピー(複製の作成)に時間が掛かったり、一時ファイルフォルダに収まらない場合があり、開けない可能性がある。

その3。上記2つの方法をファイルの大きさで切り換える方法

1.ファイルの大きさを取得する。
2-A.コピー(複製の作成)に時間がかかりそうな大きさ、または、一時ファイルフォルダに収まらない大きさの場合、上記「その1」の方法で開く。
2-B.そうじゃなかったら、上記「その2」の方法で開く。
    • good
    • 0
この回答へのお礼

ありがとうございました。

ファイル自体のサイズは常に一定であるため、2の方法をとりました。

お礼日時:2008/02/01 15:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!