3

ユーザーが誤ってアプリケーションのデータ ディレクトリに入るのを防ぐ方法を、しばらくの間調査してきました。

私のアプリケーションはフォルダーを使用して、構造化されたプロジェクトを保存します。フォルダの内部構造は重要であり、めちゃくちゃにすべきではありません。ユーザーにこのフォルダー全体を表示し、(Mac バンドルのように) 開けないようにしたいと思います。

Windowsでそれを行う方法はありますか?

現在の回答から編集

もちろん、ユーザーが自分のデータにアクセスするのを防ごうとしているのではなく、誤ってデータの整合性を破壊しないように保護しているだけです。したがって、暗号化やパスワード保護は必要ありません。

.Net の回答に感謝しますが、残念ながら、これは主に .Net フレームワークに依存しない C++ プロジェクトです。

私が言及しているデータは光ではなく、電子顕微鏡から取得した画像です。これらのデータは巨大になる可能性があるため (~100 MiB から ~1 GiB)、すべてをメモリにロードすることはできません。これらは巨大なイメージであるため、アーカイブ全体をメモリにロードすることなく、一度に 1 つのファイルにアクセスして、データを段階的に読み取る方法をスト​​レージが提供する必要があります。

その上、アプリケーションは主にレガシーであり、私たちが責任を負わないコンポーネントもあります。現在の IO コードを保持できるソリューションが望ましいです。

Shell Extension は面白そうです。解決策をさらに調査します。

LarryF さん、Filter Driver または DefineDOSDevice について詳しく説明していただけますか? 私はこれらの概念に精通していません。

4

10 に答える 10

1

ZIPファイルアプローチを採用する場合(私はあなたのために検討しましたが、それについては言及しませんでした)、deflateアルゴリズムを使用することをお勧めしますが、独自のファイルシステムを使用してください...TAR形式のようなものを見てください。次に、コードを記述して、ディスクに書き込まれるときにすべてのI/OをInflate/Deflateアルゴリズムを通過させます。ZIPの「FORMAT」は使用しません。ファイルを確認し、最初の2バイトとしてPKを見つけて、ファイルを解凍するのが簡単すぎるためです。

Joshperryの提案が一番好きです。

もちろん、すべてのデータを1つのファイルに格納するデバイスドライバーを作成することもできますが、ここでもドライバーを検討しています。(ドライバーの外部で実装できるかどうかはわかりません。おそらく可能であり、プログラムの内部でDefineDOSDeviceを呼び出して、コードのみがアクセスできる名前を付けると、通常のファイルシステムと見なされます。 )。いくつかのアイデアを試してみて、うまくいったらサンプルを撮ります。今、あなたは私に興味を持ってもらいました。

于 2008-12-12T20:34:42.617 に答える
1

構造化ストレージは、あなたが説明するシナリオ向けに設計されました。

構造化ストレージは、ストレージおよびストリームと呼ばれる構造化されたオブジェクトのコレクションとして単一のファイルを処理することにより、COM でファイルとデータの永続性を提供します。

「ストレージ」はフォルダーに似ており、「ストリーム」はファイルに似ています。基本的に、構造化ストレージ API を使用してアクセスすると、完全な自己完結型ファイル システムのように動作し、見える単一のファイルがあります。

ただし、次の点に注意してください。

構造化ストレージを開発目的で使用するには、COM テクノロジを十分に理解している必要があります。

于 2010-02-08T00:07:20.900 に答える
1

プログラムの内側ですか、それとも外側ですか?

方法はありますが、どれも簡単ではありません。おそらく、ファイル システム上のフィルター ドライバーを参照することになるでしょう。

于 2008-12-12T18:56:58.837 に答える
0

覚えておいてください:それをファイルシステムに保存すると、ユーザーは常にそれを見ることができます。エクスプローラーを改ざんし、代わりにcmd.exeを使用します。またはトータルコマンダー。または他の何か。

他の人にあなたのファイルを台無しにさせたくないのなら、私はお勧めします

  • ファイルの改ざんを防ぐためにそれらを暗号化する
  • それらをアーカイブ(つまりZIP)に入れ、パスワードで保護し、実行時に圧縮/解凍します(アーカイブの変更が速いアルゴリズムを検索します)

もちろん、これは完全な保護ではありませんが、実装はかなり簡単で、オペレーティングシステム内にファンキーなものをインストールする必要はなく、好奇心旺盛なユーザーを遠ざける必要があります。

もちろん、コンピューター自体を制御せずに、ユーザーのコンピューター上のファイルを完全に制御することはできません。

于 2008-12-12T19:22:24.963 に答える
0

Tomalakのzipアーカイブの提案を「プロジェクトファイル」として使用するソフトウェア(Visual ParadigmのAgilian)を見たことがあります。Zipファイルはよく理解されており、非標準のファイル拡張子を使用すると、カジュアルなユーザーが「ファイル」をいじるのを防ぐことができます。これの大きな利点の1つは、破損が発生した場合に標準ツールを使用して問題を修正できることです。メインアプリケーションをサポートするための特別なツールを作成することを心配する必要はありません。

于 2008-12-12T19:26:12.990 に答える
0

FUSEのWindows版がいくつか出始めているようです。レガシー コード (非常に大きい) をそのままにしておくことができるので、これが最善の解決策になると思います。

于 2010-02-07T23:17:52.713 に答える