プログラム設定を保存するためのNTFS機能

画像 Windowsでは、プログラム設定を保存する方法がいくつかあります。 レジストリ、iniファイル、その他の種類のファイル(開発者の裁量による)。 時には便利なものもあれば、時には便利なものもあります...それぞれのアプローチには長所と短所があります。 どちらが優れているかを把握し、いくつかのアプローチの利点を組み合わせた代替手段を提供することを提案します。



レジストリは、設定がすべて1か所にあり、プログラムの隣にたむろしないため便利です。 ただし、同じプログラム(ユーティリティ)の複数のコピーを使用し、同時に異なる設定を使用する必要がある場合は、あまり便利ではありません。 次に、プログラムを記述するときにこれを考慮し、プログラムのコピーごとに個別に保存を実装するものを考え出す必要があります。 たとえば、レジ​​ストリキーを強調表示します。これには、実行可能ファイルの名前も含まれます。

* .iniファイルは、他の設定ファイルと同様に、直接配置されているプログラムの設定を保存するので便利です。 したがって、異なる設定でプログラムの複数のコピーを保持できます(プログラムが異なるディレクトリにある場合のみ)。 ただし、これらのファイルをプログラムの横にドラッグする必要があります。 プログラムが大きくなく、1つのexeファイルで十分であり、余分なファイルとリソースが必要ない場合、これらの設定ファイルは負荷として魂にかかっています。

プログラム設定を保存して、その隣に設定ファイルがないようにすると同時に、同じディレクトリにある場合でも、各exeファイルには独自の設定がある別の場所についてお話したいと思います。 この方法はNTFSでのみ機能します。 ファイルシステム自体の機能を使用します。

NTFSのファイルには、ファイルストリームと呼ばれるものがあります。



これはどのように実装されますか? NTFSの観点から見ると、ファイルの名前、権限、ファイル自体に保存されているデータで終わるファイルに関する情報は、独自のストリーム(ストリーム)に保存されている属性です。

画像

通常、ファイルには1つのストリーム(メインストリーム)があります。 一般に、どのファイルにも任意の数のスレッドを含めることができます。 マルチスレッドファイルは、ユーザーの観点からは分割できない単位のように見える、シングルスレッドファイルのコレクションの一種です。 実際、これは一連のファイルストリームであり、それぞれを個別に作成、編集、および削除できます。 追加の各ストリームには、このストリーム内のデータにアクセスするための記号名があります。 たとえば、「Program.exe:stream」。 ストリーム自体は、レコーディング用に初めて開いたときに作成され、通常のファイルのように操作できます。

ストリームを操作するためのサンプルC ++コードを次に示します。

 void read_settings(){ try{ ifstream file("Program:settings"); char* ProgramTitle = new char[256]; file >> ProgramTitle; } catch(...){ //     } }
      
      





ストリームへの書き込みについても同様です。

したがって、設定を実行可能ファイルに直接保存する機会が得られます。 さらに、これらの設定はファイルのどこにも行きません。また、exeファイルごとに、個々の設定を保存できます。 設定をカテゴリなどに分割する場合は、設定の種類ごとに複数のスレッドを作成できます。



この設定保存方法は、アプリケーションが大きくなく、1つの実行可能ファイルで構成されている場合に便利です。 また、ある意味で設定をストリームに保存すると、セキュリティが向上します。 ストリームの名前がわかっている場合にのみ、情報を読み取ることができます。 しかし、ファイル内にどのストリームが存在するか、またストリームが存在するかどうかを確認することは必ずしも容易ではありません。 ほとんどの場合、ファイルに含まれるストリームを知らせるAPI関数があります。 しかし、これらの機能の存在を完全に知らない人は、設定が保存されている場所を推測しません。

画像

この方法にはわずかな欠点があります。 このようなファイルを別のファイルシステムのパーティションに転送する場合、名前のないメインストリームのみがコピーされることに注意してください。 このようなファイルは、NTFSファイルシステムでのみ使用するのが理にかなっています。

また、設定を別の場所に転送する場合は、エクスポート手順を作成する必要があります。

しかし、残りの部分については、この方法は非常に柔軟で便利だと思います。 それは、構成の可能性を備えたポータブルアプリケーションを実現します。



All Articles