File INI atau Registry atau file pribadi?

19

Saya ingin menyimpan konfigurasi proyek saya yang termasuk

  1. Ukuran layar
  2. Posisi layar
  3. Jalur folder
  4. Pengaturan pengguna dan sebagainya.

Tempat standar tempat Anda dapat menyimpan ini adalah nilai konfigurasi:

  1. Daftar
  2. File INI
  3. File pribadi (seperti * .cfg)

Bagaimana Anda memilih di antara tempat-tempat ini? Juga, apakah ada pro dan kontra menggunakan salah satunya?

Shirish11
sumber
2
Alat apa yang Anda gunakan? Beberapa teknologi hadir dengan perangkat manajemen konfigurasi yang bagus.
@ Pierre303 saat ini menggunakan VS 2008 untuk VC ++
Shirish11
Apakah pengguna perlu melakukan perubahan?
JeffO
1
Sudahkah Anda mempertimbangkan YAML, Anda mendapatkan yang terbaik dari keduanya, ini dan xml en.wikipedia.org/wiki/YAML
JF Dion

Jawaban:

20

Juga adakah pro dan kontra dari penggunaannya?

Daftar:

  • + Relatif standar di lingkungan Windows.
  • + Umumnya dukungan yang baik dari installer, dll.
  • - Platform API tertentu, jika Anda ingin port aplikasi Anda.
  • - Tidak bisa dibaca manusia.

File INI:

  • + Format sederhana.
  • + Portable.
  • + Dapat dibaca manusia.
  • - Mungkin sulit untuk menyimpan informasi yang lebih kompleks (misalnya, apa pun yang bersarang lebih dari dua level).
  • ?Mungkin harus menulis parser Anda sendiri (walaupun tidak sulit) atau menggunakan perpustakaan eksternal seperti SimpleIni (terima kasih kepada Jonathan Merlet untuk komentarnya).

File XML (saya rasa ini adalah opsi .cfg):

  • + Format standar.
  • + Portable.
  • + Mendukung struktur bersarang yang dalam.
  • - Tidak bisa dibaca manusia.

Secara pribadi, untuk aplikasi Windows saya cenderung menggunakan C #, dan pergi dengan file pribadi untuk pengguna, disimpan sebagai XML. Saya melakukan ini biasanya karena keterbacaan manusia biasanya tidak menjadi prioritas dalam jenis aplikasi yang saya tulis (dan aplikasi harus memiliki editor konfigurasi, dalam hal apa pun), dan dalam lingkungan .NET , sangat mudah untuk bekerja dengan XML. Saya sangat sering berakhir dengan objek UserConfiguration yang hanya serial ke dan dari file konfigurasi - hampir tidak ada pengembangan yang terlibat (parsing, casting barang sekitar), dan Anda memiliki konfigurasi Anda siap digunakan dalam lingkungan yang sangat diketik.

Daniel B
sumber
Saya menggunakan SimpleIni untuk mem -parsing file INI beberapa waktu yang lalu dan itu berfungsi dengan baik.
Jonathan Merlet
@JonathanMerlet terima kasih, saya telah menambahkan SimpleIni ke pos.
Daniel B
15

Saya akan menggunakan file INI, mereka adalah pilihan yang lebih ramah manusia:

[window]
width       = 600
height      = 350
position.x  = 400
position.y  = 200

[paths]
path1       = "/some/random/path/"
path2       = "/some/other/random/path/"

[user]
name        = "Yannis"
preference  = "INI"

XML mungkin merupakan opsi yang baik, tetapi tidak bisa mengalahkan kesederhanaan dan keanggunan INI:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <window>
        <width>600</width>
        <height>350</height>
        <position>
            <x>400</x>
            <y>200</y>
        </position>
    </window>
    <paths>
        <path1>/some/random/path/</path1>
        <path2>/some/other/random/path/</path1>
    </paths>
    <user>
        <name>Robert</name>
        <preference>XML</preference>
    </user>
</configuration>

INI juga sangat dipahami dan platform independen. Mungkin tidak ada banyak alat yang tersedia untuk mereka seperti untuk file XML, karena, yah, siapa yang membutuhkan alat khusus untuk membaca dan mengedit file INI?

yannis
sumber
2
Lucu, tapi saya menemukan XML lebih bagus dan lebih mudah dibaca. Bagi mereka yang tidak menyukai kata kerja, JSON adalah alternatif yang cocok.
Robert Harvey
3
@RobertHarvey JSON Saya suka (dan akan digunakan jika saya perlu bersarang lebih dalam), tetapi XML sebenarnya bukan cangkir teh saya ...
yannis
2
XML dapat dibuat lebih bagus dengan menggulirkan nilai ke atribut. Misalnya,<window width="600" height="350" />
Robert Harvey
Saya sebenarnya terkejut belum ada yang menyebutkan YAML. Saya merasa itu sentuhan yang lebih ramah manusia daripada JSON, tetapi sangat mirip dalam kemampuan dan sintaksis. Situs yaml.org mungkin membuat takut siapa pun yang belum terbiasa dengannya.
Daniel B
@DanielB Seseorang memang menyebutkan YAML ;)
yannis
6

Preferensi saya adalah file XML. Mereka hierarkis, Anda dapat membengkokkannya sesuai keinginan Anda dengan cara apa pun yang dapat dibayangkan, mereka dipahami dengan baik, platform independen, dan ada beragam perangkat lunak yang tersedia untuk membaca dan menulisnya.

Robert Harvey
sumber
6
Tapi mengerikan verbose dan cenderung tidak dapat dibaca setelah semua manusia (berpikir tidak menjorok ke atas dengan pernyataan namespace dan bs lainnya).
Manjabes
1
@ Manjabes: Karakteristik yang tidak mungkin signifikan untuk file konfigurasi.
Robert Harvey
@robert harvey: sangat penting di tempat saya tinggal. Untuk campur tangan dasar dengan pengaturan Anda menggunakan gui, untuk pengaturan lanjutan Anda pergi mengedit ini.
Pieter B
6

Untuk memperluas saran Jeff D tentang YAML , inilah intro singkat.

YAML mirip dengan JSON (pada kenyataannya, JSON adalah bagian dari YAML sejak versi 1.2 dari standar YAML, dan dengan demikian JSON yang valid dapat diuraikan oleh parser YAML). Pada pandangan pertama, perbedaan utama adalah bahwa YAML (secara default) menggunakan lekukan daripada tanda kurung untuk menunjukkan hierarki. Ada juga kurangnya tanda kutip untuk string. Contoh cepat dari atas:

configuration:
  window: 
    width:       600
    height:      350
    position:
      x:         400
      y:         200
  paths:
    path1:       some/random/path
    path2:       some/other/random/path
  user:
    name:        Joe Soap
    preference:  YAML

Lihat halaman YAML Wikipedia untuk contoh yang lebih baik. Dukungan untuk YAML ada untuk sebagian besar bahasa utama (lihat yaml.org untuk detailnya).

Daniel B
sumber
3

Anda lupa opsi: Basis Data. Ini sebagian besar digunakan dalam skenario di mana Anda memiliki pengguna masuk ke aplikasi Anda ketika aplikasi Anda tidak dapat mengandalkan pengguna windows login. Ini misalnya ketika aplikasi Anda berjalan di jendela mode kios.

Pieter B
sumber
Anda mungkin memerlukan file INI atau kunci registri untuk menahan detail koneksi / string ke database
Class Skeleton
@CamelCase Inifile atau kunci registri sudah disebutkan dalam Pertanyaan, tetapi bukan Basis Data. Saya tidak bermaksud mengatakan bahwa Anda tidak dapat menggunakan beberapa metode sekaligus.
Pieter B
1

Preferensi pribadi saya adalah file XML:

Dalam kebanyakan kasus, saya tidak berharap pengguna harus mengedit pengaturan konfigurasi mereka sehingga masalah keterbacaan manusia bukan argumen dalam kasus ini.

Jika mereka perlu mengeditnya, Anda dapat menyediakan alat pengeditan - ini mencegah pengguna melakukan sesuatu yang gila dengan data. Jika mereka ingin mengembalikan pengaturan default, Anda bisa memberi tahu mereka untuk menghapus file x yang mana sebagian besar pengguna akan merasa nyaman melakukannya.

Perhatikan bahwa Anda masih perlu berhati-hati bahwa Anda memiliki izin untuk menyimpan file Anda karena beberapa lokasi tidak memiliki akses tulis secara default di Windows 7 dll.


File INI adalah cara standar yang baik untuk menyimpan konfigurasi dan telah dicoba dan diuji tetapi mereka hanya terasa sedikit 'Windows 3.1' bagi saya!

Mungkin opsi terbaik jika Anda ingin pengguna dapat mengutak-atik data mereka


Saya pribadi akan menjauh dari registri. Untuk satu hal Anda tidak dapat menjamin bahwa pengguna memiliki izin yang diperlukan untuk membaca / menulis ke mana pun Anda ingin menyimpan data Anda.

Dalam OS yang lebih baru di mana virtualisasi registri berperan, ini dapat menyebabkan kebingungan besar karena Anda tidak dapat 'melihat' pengaturan tervirtualisasi - ini telah menggigit kami lebih dari sekali di mana telah menghabiskan waktu berjam-jam untuk mencari tahu mengapa sesuatu tidak berfungsi.

Matt Wilko
sumber
3
Jika Anda khawatir tentang Izin untuk lokasi registri, maka Anda mungkin mencoba untuk menyimpannya di tempat yang salah. Pengguna harus memiliki izin ke sarang HKey_Current_User, dan di situlah pengaturan per pengguna harus!
Neil White
@NeilWhite - setuju mereka harus memiliki izin tetapi administrator TI yang terlalu bersemangat dapat mengubah ini (atau memberikan baca / tulis tetapi tidak membuat izin). OP juga tidak menyebutkan bahwa pengaturan ini harus per pengguna , mereka mungkin per mesin.
Matt Wilko
Juga, registri dapat memiliki batas ukuran. File tidak.
linquize