• 締切済み

読み取り専用でファイルを開きたい

お世話になります。 現在、ListViewにドラッグ&ドロップで様々なファイル名を格納し、ボタンクリックイベントで規定のディレクトリにコピーする機能を作成しております。 その中で、ListView内のファイル名をダブルクリックすると読み取り専用で開かれるようにしたいのですが、 現ロジック-------------------------------------------------- CreateObject("Shell.application").ShellExecute(ファイル名) ----------------------------------------------------------- 上記の書き方だと、確かに開くのですが読み取り専用という指定がないため、簡単に上書きできてしまいます。 読み取り専用にするには、どこで指定すべきでしょうか? よろしくお願いいたします。

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.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」の方法で開く。

aiai0223
質問者

お礼

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

関連するQ&A

  • エクセルVBAでPDFやJPGファイルを開閉する

    エクセルでPDFやJPGファイルを開くことは下記のコマンドで できたのですが開いたファイルを閉じる方法がわかりません。 開くのはとても簡単でしたが。 CreateObject("Shell.Application").ShellExecute XPATH & JPGNAME

  • VBで「.tif」または「.pdf」形式のファイル印刷

    VBで「.tif」または「.pdf」形式のファイルを一度に複数印刷したいのですが、何かよい方法はないでしょうか。 一応、 fname = "ここにファイルのパスと名前" CreateObject("shell.application").shellexecute fname でファイルを開くようにしたのですが、ここから先が分かりません…。 よろしくお願いします。

  • ShellExecuteってなんで関数?

    ファイルとかを開く時に使うShellExecuteって何故関数なのですか? Sub test() Dim ファイル名 As String ファイル名 = "C:\Test用テキストファイル.txt" CreateObject("Shell.Application").ShellExecute ファイル名 End Sub このようなコードでファイルを開いていますが、関数って戻り値がある場合に使うのですよね? http://msdn.microsoft.com/ja-jp/library/cc422072.aspx をみたらShellExecuteは関数との事でした。 ずっとメソッドだと思ってました。

  • ShellExecute でショートカットを開く

    Visual Basic 6.0 コマンドボタンでリンク先のファイルを開くプログラムを作成しています。 コマンドボタンクリック時に、下記ステートメントを入れているのですが リンク先が、ショートカットの場合エラーして開けません。(見つかりませんのエラー) リンク先全てを開くことは出来ないのでしょうか? すみませんがご教授願います。 CreateObject("Shell.Application").ShellExecute C:\AAA 'AAA = ショートカット名

  • VSC# ListViewへのドラッグ&ドロップ

    エクスプローラにある複数のファイル同時にListViewにドラッグ&ドロップしてそのファイル名をListViewに追加したいのですが、どのようにすれば出来るのでしょうか? ※ファイル名の表示はすでに出来ています。複数追加のやり方を知りたいです。 教えてください、お願いします><

  • エクセルのVBA

    お世話になります。 エクセルのVBAで,PDFを開くよう組んでいます。以下がそのVBAです。 CreateObject("Shell.Application").ShellExecute "C:\Users\コンピュータ名\Desktop\フォルダ名\ファイル名.pdf" このエクセルとPDFを別のパソコンに移すと,リンクが切れてPDFが開かなくなってしまいます。 どのようにすれば,別のパソコンに移してもそのまま開くことができますか。パワポなど,ほかのソフトも同様に,リンクが切れてしまいますので,ご教授願います。

  • 縮小専用というソフト

    縮小専用というソフトの使い方について教えてください 縮小専用の画面に、画像をドラッグ&ドロップ するにはどうすればいいのでしょうか? マイドキュメントの中の画像ファイルを左 クリックして、移動させるんですが 縮小専用の画面まで移動させても画像が 移せません

  • 誤ってZIPファイルを上書きしてしまいました

    普通だったらそのままZIPファイルをクリックするだけで解凍できたのに何を思ったのかドラッグ&ドロップで解凍しようと思いしかもlhasaのほうをドラッグしZIPファイルのほうにドロップしてしまったのでZIPファイルが解凍ソフトに上書きされてしまいました もとのZIPファイルに復元することはできないでしょうか ちなみにもうDLしなおすことはできません お願いします

  • CGI専用ディレクトリについて

    各サーバーごとにCGI専用ディレクトリ cgi-bin ディレクトリが用意されていたりCGI専用ディレクトリ名を特に指定していないサーバーがありますがディレクトリ名を指定していないサーバーの場合、仮に ディレクトリ名をabc-cgiとしてサーバーにアップした際にディレクトリの中は空のままでもいいのでしょうか? 初期のCGI専用ディレクトリを設置した状態でのことです。 それとも設置した専用ディレクトリの中に何か入れて置いたほうがいいのか? セキュリティー上? 後にCGIのファイルやディレクトリをアップする積もりです。 CGIに詳しい方に、指導してもらえると助かります。 よろしくお願いします。

    • 締切済み
    • CGI
  • 削除できないファイル

    削除できないrarファイルがあります。 壊れているようで、解凍できません。 クリック→Deleteを押しても反応なし ドラッグ&ドロップが出来ない(移動しない) 右クリックすると、 「プログラムから開く」 「送る」の2つしか出てきません。 異様に長い名前なのですが、リネームもできません。 削除ツールのようなもので、ファイルを指定しようとすると、 「ファイルが見つかりません。指定したファイル名が正しいかどうか確認してください。」と出ます。 safeモードでも同じ状況です。 上手く説明できないのですが、 どなたか削除方法をご存知ないでしょうか。