• 締切済み

DOSやエクスプローラでのcopyを禁止(抑止)したい

DOSのCOPYや、エクスプローラのペーストで、特定ファイル(例:c:\temp\test.txt)のCOPYを禁止(抑止)する方法を模索しています。 c:\temp\test.txtは任意のタイミングでユーザがペーストしたり常駐アプリが作成します。 他の常駐アプリが消去するまで(既に存在する場合には)コピーをエラーとしたいのです。 OSはWIN2003serverです。 お知恵をお持ちの方、よろしくお願いします。

  • mgkun
  • お礼率30% (3/10)

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

常駐ソフトがあるならディレクトリを常時監視して、作られたらすかさず排他ロックを掛ければ他のプログラムからは読めない用には出来ますが、それで目的を満たすのですかね。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

ファイル操作関連のWindowsAPIをフックするぐらいしか思いつきません。 ※APIのフック方法については「Advanced Windows」という書籍が参考になると思います。

関連するQ&A

  • DOSコマンド COPY(複数ファイルをまとめる)

    DOSコマンドで、複数ファイルをまとめるのに COPYコマンドを使用しています。 まとめたファイル上にコメント文を加えたいのですが どうすればできるのでしょうか? 下記は、a.txtとb.txtをまとめて、c.txtにしています。 copy a.txt + b.txt c.txt だと、 そのままデータがつながってしまい、コメント文を 入れることができません。 [a.txt] aaa [b.txt] bbb  ↓ [c.txt] "Input A.txt" aaa "Input B.txt" bbb

  • バッチのcopy

    フロッピーのサブディレクトリへのファイルコピーで、コピー先のファイル名を指定しないと、コピー先ディレクトリが間違っているといわれます。 a:\tempは既存フォルダです。 @echo off copy C:\WINDOWS\デスクトップ\1.txt a:\ copy C:\WINDOWS\デスクトップ\2.txt a:\temp\ これでは2.txtがコピーできないので copy C:\WINDOWS\デスクトップ\2.txt a:\temp\2.txt のようにしなくてはなりません。 コピー先のファイル名を指定せずにコピーする方法がありましたら教えてください。

  • バッチファイルでCOPYができない。

    バッチファイルを作成するのが初めてでしてうまくいきません。 copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ というコードを実行してみたんですが、 C:\Documents and Settings\(ユーザー名)>copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ だとできて、 C:\Documents and Settings>copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ だとできません。 (実行する場所によって違うということです) どこで実行してもできるようにしたいのですがどうすればよろしいですか?

  • DOS画面起動時のパチパチを防ぐには

    VBAからDOSコマンドを起動した時、画面が一瞬パチパチ してしまいますが、このパチパチを防ぐ方法はありませんか? よろしくお願いします。 下記コードは、C:\test配下のCSVファイルを1つにまとめて、 C:\testにall.txtとして格納するものです。 その際、DOSコマンドを起動しました。 Set WSH = CreateObject("Wscript.Shell") Cmd = "COPY C:\kamakura\*.csv C:\kamakura\all.txt" Set wExec = WSH.Exec("%ComSpec% /c " & Cmd) Do While wExec.Status = 0 DoEvents Loop ' Set wExec = Nothing Set WSH = Nothing

  • エクスプローラのCut&Pasteでベリファイを行うには?

    Windows95のエクスプローラ上から、カット&ペーストでベリファイ(データが正しく書かれたかどうかをチェックする機能)を実施したいと考えています。 DOSコマンドでは、copyおよびxcopyコマンドの-vオプションを付ければ実現可能ですが、エクスプローラ上から明示的に行う方法はないでしょうか? ご存知の方、ご支援よろしくお願い致します。

  • COPYを関数内で使用する時

    はじめまして。 下記のようにCOPYを関数内で使用したいと考えています。 CREATE FUNCTION test(TEXT) RETURNS void AS $$ BEGIN COPY(SELECT * FROM table1) TO $1 DELIMITER ','; END; $$ LANGUAGE plpgsql; これをpgAdmin3で実行すると$1の部分でsyntax errorとなり関数が作成できません。 $1の代わりに 'C://temp/foo.txt' と書けば通るのですが、何か良い方法はないでしょうか? やりたいことは、関数に保存先のファイル名を渡してデータをエクスポートするという処理です。 アドバイスお願いいたします。

  • テキストファイル連結のDOSコマンドについて

    テキストファイル連結のDOSコマンドについて あるフォルダに下記の様なテキストファイル群があります a.txt、b.txt、c.txt、d.txt・・・・ これらをすべて連結するには copy *.txt all.txt とすればいいのですが、一つ一つのファイルの区切りに目に「■■■■■■■■■■■■■■■」のような区切り文字を入れたいのですが何らかの方法はありますでしょうか?

  • バッチファイル 現在のフォルダ名をファイル名に置き換える

    こんにちは。超初心者なのですが教えてください。 ある複数フォルダに格納されている.txtファイルを、現在の フォルダ名を取得して、別フォルダにリネームして 格納するバッチファイルを作成したいと考えています。 for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。 例えば、 データ取得元として以下のファイルがあったら C:\temp\20100101\data1.txt C:\temp\20100101\data2.txt C:\temp\20100101\data3.txt C:\temp\20100102\data1.txt C:\temp\20100102\data2.txt C:\temp\20100103\data1.txt C:\temp\20100103\data2.txt これを別フォルダに、現在のフォルダ名をファイル名にくっつけて 以下のように一つのフォルダに纏めて格納したいと思っています。 ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド を使うかもしれないです。 C:\test\data1_20100101.txt C:\test\data2_20100101.txt C:\test\data3_20100101.txt C:\test\data1_20100102.txt C:\test\data2_20100102.txt C:\test\data1_20100103.txt C:\test\data2_20100103.txt 実装方法として以下までは考えましたが、これ以上は無理そうです。 rem set A=C:\temp rem set B=C:\test for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A" for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B" for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) ) ) ) popd? ) ) 申し訳ありませんが、お助け願います。

  • DOSコマンドで、指定階層のExcelファイルを開くには?

    こんにちは。 Dosコマンドで指定のExcelファイルを開くには、どのように入力すればよろしいでしょうか? 例:c:\temp\test.xls を開く場合

  • 標準出力をDOS窓を開かずにファイルに書き込む方法

    VC++(Console Appli)です。 あるコマンドの標準出力結果をファイルに吐き出す方法として、 単純には、 system("cmnd > C:\\temp.txt"); とやれば実現できますが、このとき、一瞬ですが、DOS窓の黒枠が表示されます。 このDOS窓を出さないで済む方法があれば教えてください。 標準出力を何らかの方法で受け取って、 ------------------------------------------------- CString str; CStdioFile file;   :  cmndの標準出力結果をstrへ内部的に受け取らせる。   : file.Open(_T("c:\\temp.txt"), CFile::modeWrite); file.WriteString(str); file.Close(); ------------------------------------------------- などで簡単に出来れば良いのですが・・よろしくお願いします。

専門家に質問してみよう