ファイル名を変更したりデータを変更したり、移動したり
を禁止するプログラムは作成可能ですか?
もし可能ならそれはソフトを常駐させなければ無理でしょうか?
どうか教えてください。
特定のファイルをオープンできなくするための話でしたら
既に過去ログに近い話があったと記憶しています。
ただ、質問者が途中で切れてスレッドを勝手に閉じてしまったので
参考程度にしかならないと思いますけれど。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200401/04010047.txt
中で話が出ていますが、OSのファイルのアクセス権と同じ事するのは
多分無理だと思います。
少なくともそのソフトは常駐しないと駄目でしょう。
OSは文字通り常駐しているから監視できているわけですし。
まず、OSの種別と開発環境について明確にして下さい。
それがないと、適切な回答は得られませんよ。
例えば、Win2000/XPであれば、
サービスプログラムを使用することで特定のプログラムを
常駐させることが可能ですので、
指定されたファイルをロックするサービスプログラムと、
それに対するユーザフロントエンドプログラムを
用意することで実現出来ますね。
(ファイルロックサーバ/クライアントシステム
とでも呼べばよいでしょうか?)
ロック情報を常にログファイルに出力することで、
電源断などにより、OSが異常終了した際にも
リカバリが可能ですし・・・。
==
リードオンリー属性つける程度じゃだめですか
多少の警告表示はされるようになりますけど
自分の書き込みのときだけ、属性変更して、終了処理で再度もとの属性に変更
リードオンリー属性つける程度でいいです。
よかったら教えてください。
環境はwinmeでvc++6.0です。
すいませんこんどから気をつけます。
> リードオンリー属性つける程度でいいです。
SDKかMFCか不明ですが…
SDKの場合だと、GetFileAttributes()で該当ファイルの属性を取得して、
SetFileAttributes()で属性を設定できます。
一度属性を取得するのは元々の属性も反映させる為に必要です。
取得した属性にFILE_ATTRIBUTE_READONLYフラグを設定し実行します。
MFCの場合は……方法あるのかな?
MFCの場合だと以下になると思います(未確認)。
CFileStatus fs;
CFile::GetStatus(szPath, fs);
fs.m_attribute|=readOnly;
CFile::SetStatus(szPath, fs);
ひろさんの方法でためしてみたのですが、
ReadONLYを入れる時に定義されていない識別しとでるのですが、
何か宣言は必要でしょうか?
> ReadONLYを入れる時に定義されていない識別しとでるのですが、
> 何か宣言は必要でしょうか?
通常であれば問題ないハズですが……
大文字・小文字を区別しますけど、正しく記述していますか?
ReadONLYではなく、readOnlyですが。
ちなみに、afx.hで定義されています。
そうですか。。。
ではこれでやってみてください。
fs.m_attribute|=readOnly;
↓
fs.m_attribute|=0x01;
fs.m_attribute|=CFile::readOnly;
では。
属性を変更することが出来ましたありがとうございました。