INI dosyaları veya Kayıt Defteri veya kişisel dosyalar?


19

Projemin yapılandırmasını kaydetmek istiyorum.

  1. Ekran boyutu
  2. Ekran konumu
  3. Klasör yolları
  4. Kullanıcı ayarları vb.

Bunları kaydedebileceğiniz standart yerler şunlardır: yapılandırma değerleri:

  1. Kayıt
  2. INI dosyaları
  3. Kişisel dosyalar (* .cfg gibi)

Bu yerler arasında nasıl seçim yapıyorsunuz? Ayrıca, bunlardan herhangi birini kullanmanın artıları ve eksileri var mı?


2
Hangi araçları kullanıyorsunuz? Bazı teknolojiler, yapılandırma yönetimi araçlarında oldukça güzel bir yapıya sahiptir.

@ Pierre303 şu anda VC ++ için VS 2008 kullanıyor
Shirish11

Kullanıcıların değişiklik yapması gerekecek mi?
JeffO

1
Eğer YAML düşündün mü, sen ini ve xml hem iyi olsun en.wikipedia.org/wiki/YAML
JF Dion

Yanıtlar:


20

Ayrıca bunlardan herhangi birini kullanmanın artıları ve eksileri var mı?

Kayıt:

  • + Windows ortamında nispeten standarttır.
  • + Genellikle montajcılardan iyi destek vb.
  • - Uygulamanızı taşımak istiyorsanız platforma özel API.
  • - Özellikle insan tarafından okunamaz.

INI Dosyaları:

  • + Basit biçim.
  • + Taşınabilir.
  • + İnsan tarafından okunabilir.
  • - Daha karmaşık bilgileri saklamak zor olabilir (örneğin, iki düzeyden daha derin yuvalanmış herhangi bir şey).
  • ?Kendi ayrıştırıcısını yazmak (zor olmasa da) veya SimpleIni gibi harici bir kütüphane kullanmak zorunda kalabilir (yorum için Jonathan Merlet'e teşekkürler).

XML Dosyaları (Bu .cfg seçeneği olduğunu tahmin ediyorum):

  • + Standart bir biçim.
  • + Taşınabilir.
  • + Derin yuvalanmış yapıları destekler.
  • - Özellikle insan tarafından okunamaz.

Şahsen, Windows uygulamaları için C # kullanma eğilimindeyim ve kullanıcı için XML olarak saklanan kişisel bir dosyaya gidiyorum. Bunu tipik olarak yaparım çünkü insan tarafından okunabilirlik genellikle yazdığım uygulama türlerinde bir öncelik değildir (ve uygulamanın her durumda bir yapılandırma düzenleyicisine sahip olması gerekir) ve .NET ortamında XML ile çalışmak çok kolaydır. Sıklıkla bir yapılandırma dosyasına ve sadece bir yapılandırma dosyasına serileştirilmiş bir UserConfiguration nesnesi ile sonuçlanır - neredeyse hiçbir geliştirme dahil değil (ayrıştırma, şeyler döküm) ve yapılandırmanız güçlü yazılan bir ortamda kullanıma hazır.


Bir süre önce INI dosyalarını ayrıştırmak için SimpleIni kullandım ve güzel bir şekilde çalışıyordu.
Jonathan Merlet

@JonathanMerlet teşekkürler, gönderime SimpleIni ekledim.
Daniel B

15

INI dosyaları ile gitmek istiyorum, onlar daha insan dostu bir seçenek:

[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 iyi bir seçenek olabilir, ancak INI'lerin sadeliğini ve şıklığını yenemez:

<?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'ler de çok iyi anlaşılmıştır ve platformdan bağımsızdır. Muhtemelen onlar için XML dosyaları kadar çok araç yoktur, çünkü bir INI dosyasını okumak ve düzenlemek için özel bir araca ihtiyaç duyan kimdir?


2
Komik, ama XML'i daha hoş ve okunması daha kolay buluyorum. Ayrıntıları sevmeyenler için JSON uygun bir alternatiftir.
Robert Harvey

3
@RobertHarvey JSON Seviyorum (ve daha derin yuvalama gerekiyorsa kullanacağım), ancak XML gerçekten benim fincan çayım değil ...
yannis

2
XML, değerleri özniteliklere yuvarlayarak daha güzel hale getirilebilir. Örneğin,<window width="600" height="350" />
Robert Harvey

Aslında kimsenin YAML'den bahsetmediğine şaşırdım. JSON'dan daha insan dostu bir dokunuş olduğunu hissediyorum, ancak yetenek ve sözdiziminde oldukça benzer. Yaml.org web sitesi, muhtemelen henüz aşina olmayan birini korkutur.
Daniel B

@DanielB Birisi YAML'den bahsetti ;)
yannis

6

Benim tercihim XML dosyaları. Hiyerarşiktirler, onları hayal edebileceğiniz herhangi bir şekilde iradenize göre bükebilirsiniz, iyi anlaşılır, platformdan bağımsızdır ve bunları okumak ve yazmak için çok çeşitli yazılımlar vardır.


6
Ancak korkunç derecede ayrıntılı ve insan tarafından okunabilir olmayan eğilimindedir (isim alanı bildirimleri ve diğer bs ile maksimum girintili veya şişirilmemiş düşünün).
Manjabes

1
@Manjabes: Yapılandırma dosyaları için önemli olması muhtemel olmayan özellikler.
Robert Harvey

@robert harvey: yaşadığım yerde çok önemli. Ayarlarla temel işlemlerde gui'yi kullanırsınız, gelişmiş ayarlar için ini'yi düzenlersiniz.
Pieter B

6

Jeff D'nin YAML önerisini genişletmek için kısa bir giriş.

YAML, JSON'a benzer (aslında, JSON, YAML standardının 1.2 sürümünden bu yana YAML'nin bir alt kümesidir ve bu nedenle geçerli JSON, YAML ayrıştırıcıları tarafından ayrıştırılabilir). İlk bakışta, ana fark YAML'nin (varsayılan olarak) hiyerarşiyi göstermek için basamaklama yerine girinti kullanmasıdır. Ayrıca dizeler için belirgin bir tırnak eksikliği de vardır. Yukarıdan kısa bir örnek:

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

Daha iyi örnekler için Wikipedia'nın YAML sayfasına bakın . Çoğu büyük dil için YAML desteği mevcuttur ( ayrıntılar için yaml.org adresine bakın).


3

Bir seçeneği unuttun: Veritabanı. Bu çoğunlukla, uygulamanız oturum açmış olan Windows kullanıcısına güvenemediğinde uygulamanızda oturum açan kullanıcıların bulunduğu senaryolarda kullanılır. Bu, örneğin uygulamanız bir kiosk modu pencerelerinde çalışırken geçerlidir.


Veritabanına bağlantı bilgilerini / dizesini tutmak için bir INI dosyasına veya kayıt defteri anahtarına ihtiyacınız olabilir
Class Skeleton

@CamelCase Inifile veya kayıt defteri anahtarı Soruda daha önce belirtilmiş, ancak Veritabanında belirtilmemiş. Aynı anda birden fazla yöntem kullanamayacağınızı söylemek istemedim.
Pieter B

1

Kişisel tercihim XML dosyaları:

Çoğu durumda kullanıcının yapılandırma ayarlarını düzenlemek zorunda kalmasını beklemiyorum, bu nedenle insan tarafından okunabilirlik sorunu bu durumda bir argüman değildir.

Bunları düzenlemeleri gerekiyorsa, bir düzenleme aracı sağlayabilirsiniz - bu, kullanıcının verilerle ilgili bir şey yapmasını önler. Varsayılan ayarları geri yüklemek istiyorlarsa, çoğu kullanıcının rahatça kullanacağı x dosyasını silmelerini isteyebilirsiniz.

Bazı konumların Windows 7'de varsayılan olarak yazma erişimine sahip olmadığı için dosyanızı saklama izninizin olmasına dikkat etmeniz gerektiğini unutmayın.


INI Dosyaları yapılandırmayı depolamanın iyi bir standart yoludur ve denenmiş ve test edilmiştir, ancak bana biraz 'Windows 3.1' hissettiriyorlar!

Kullanıcının verileriyle uğraşmasını istiyorsanız, muhtemelen en iyi seçenek


Şahsen kayıt defterinden uzağa yönlendirirdim. Bir kere, kullanıcının verilerinizi saklamak istediğiniz yere okumak / yazmak için gerekli izinlere sahip olduğunu garanti edemezsiniz.

Kayıt defteri sanallaştırmasının devreye girdiği daha yeni işletim sistemlerinde, sanallaştırılmış ayarları 'göremediğiniz' için bu büyük karışıklığa neden olabilir - bu, bir şeyin neden çalışmadığını anlamaya çalışırken saatler harcadığımız için bizi bir kereden fazla ısırdı.


3
Kayıt defteri konumları için İzinler konusunda endişeleriniz varsa, muhtemelen onları yanlış yerde depolamaya çalışıyorsunuzdur. Kullanıcının HKey_Current_User kovanı için izinleri olmalıdır ve kullanıcı başına ayarlar burada olmalıdır!
Neil White

@NeilWhite - izinleri olması gerektiğine karar verdiler , ancak aşırı gayretli bir BT yöneticisi bunu değiştirebilir (veya okuma / yazma verebilir ancak izinler oluşturamaz). Ayrıca OP, bu ayarların mutlaka kullanıcı başına olduğunu, makine başına olabileceğini belirtmedi .
Matt Wilko

Ayrıca kayıt defterinin boyut sınırı olabilir. Dosyalar yok.
2013'te
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.