INI tập tin hoặc đăng ký hoặc tập tin cá nhân?


19

Tôi muốn lưu cấu hình của dự án của tôi, bao gồm

  1. Kích thước màn hình
  2. Vị trí màn hình
  3. Đường dẫn thư mục
  4. Người dùng cài đặt và như vậy.

Các vị trí tiêu chuẩn nơi bạn có thể lưu là các giá trị cấu hình là:

  1. Đăng ký
  2. Tập tin INI
  3. Các tệp cá nhân (như * .cfg)

Làm thế nào để bạn chọn giữa những nơi này? Ngoài ra, có bất kỳ ưu và nhược điểm của việc sử dụng bất kỳ trong số họ?


2
Bạn đang sử dụng công cụ gì? Một số công nghệ đi kèm với xây dựng khá đẹp trong các công cụ quản lý cấu hình.

@ Pierre303 hiện đang sử dụng VS 2008 cho VC ++
Shirish11

Người dùng sẽ cần phải thay đổi?
JeffO

1
Bạn đã xem xét YAML, bạn có được thứ tốt nhất của cả hai, ini và xml en.wikipedia.org/wiki/YAML
JF Dion

Câu trả lời:


20

Ngoài ra có bất kỳ ưu và nhược điểm của việc sử dụng bất kỳ trong số họ?

Đăng ký:

  • + Tiêu chuẩn tương đối trong môi trường Windows.
  • + Nói chung là hỗ trợ tốt từ các trình cài đặt, vv
  • - API cụ thể của nền tảng, nếu bạn muốn chuyển ứng dụng của mình.
  • - Không đặc biệt con người có thể đọc được.

Tập tin INI:

  • + Định dạng đơn giản.
  • + Di động.
  • + Con người có thể đọc được.
  • - Có thể khó lưu trữ thông tin phức tạp hơn (ví dụ, bất cứ thứ gì lồng nhau sâu hơn hai cấp).
  • ?Có thể phải viết trình phân tích cú pháp của riêng bạn (mặc dù không khó) hoặc sử dụng thư viện bên ngoài như SimpleIni (cảm ơn Jonathan Merlet cho nhận xét).

Tệp XML (Tôi đoán đây là tùy chọn .cfg):

  • + Một định dạng tiêu chuẩn.
  • + Di động.
  • + Hỗ trợ các cấu trúc lồng nhau sâu.
  • - Không đặc biệt con người có thể đọc được.

Cá nhân, đối với các ứng dụng Windows, tôi có xu hướng sử dụng C # và đi kèm với một tệp cá nhân cho người dùng, được lưu trữ dưới dạng XML. Tôi thường làm điều này bởi vì khả năng đọc của con người thường không phải là ưu tiên trong các loại ứng dụng tôi viết (và ứng dụng nên có trình soạn thảo cấu hình, trong mọi trường hợp) và trong môi trường .NET , rất dễ dàng để làm việc với XML. Tôi rất thường kết thúc với một đối tượng UserConfiguration đơn giản được tuần tự hóa đến và từ một tệp cấu hình - hầu như không có sự phát triển nào liên quan (phân tích cú pháp, truyền nội dung xung quanh) và bạn đã sẵn sàng sử dụng cấu hình của mình trong môi trường được gõ mạnh.


Tôi đã sử dụng SimpleIni để phân tích các tệp INI một lúc trước và nó hoạt động tốt.
Jonathan Merlet

@JonathanMerlet cảm ơn, tôi đã thêm SimpleIni vào bài viết.
Daniel B

15

Tôi muốn dùng các tệp INI, chúng là tùy chọn thân thiện với con người hơn:

[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 có thể là một lựa chọn tốt, nhưng nó không thể đánh bại sự đơn giản và thanh lịch của INIs:

<?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>

INIs cũng được hiểu rất rõ và nền tảng độc lập. Có lẽ không có nhiều công cụ có sẵn cho chúng như đối với các tệp XML, bởi vì, ai cần một công cụ chuyên dụng để đọc và chỉnh sửa tệp INI?


2
Hài hước, nhưng tôi thấy XML đẹp hơn và dễ đọc hơn. Đối với những người không thích sự dài dòng, JSON là một lựa chọn phù hợp.
Robert Harvey

3
@RobertHarvey JSON Tôi thích (và sẽ sử dụng nếu tôi cần lồng sâu hơn), nhưng XML thực sự không phải là tách trà của tôi ...
yannis

2
XML có thể được làm cho đẹp hơn bằng cách cuộn các giá trị vào các thuộc tính. Ví dụ:<window width="600" height="350" />
Robert Harvey

Tôi thực sự ngạc nhiên khi không ai nhắc đến YAML. Tôi cảm thấy nó thân thiện với con người hơn JSON, nhưng khá giống nhau về khả năng và cú pháp. Trang web yaml.org có thể khiến mọi người chưa quen với nó sợ hãi.
Daniel B

@DanielB Ai đó đã đề cập đến YAML ;)
yannis

6

Sở thích của tôi là các tệp XML. Chúng được phân cấp, bạn có thể uốn cong chúng theo ý muốn của bạn theo bất kỳ cách nào có thể tưởng tượng được, chúng được hiểu rõ, độc lập với nền tảng và có rất nhiều phần mềm có sẵn để đọc và viết chúng.


6
Nhưng dài dòng khủng khiếp và có xu hướng không phải là con người có thể đọc được (nghĩ rằng không thụt lề hoặc bồng bềnh đến mức tối đa với khai báo không gian tên và bs khác).
Manjabes

1
@Manjabes: Các đặc điểm không chắc có ý nghĩa đối với các tệp cấu hình.
Robert Harvey

@robert harvey: rất có ý nghĩa nơi tôi sống. Đối với các can thiệp cơ bản với các cài đặt bạn sử dụng gui, đối với các cài đặt nâng cao bạn hãy chỉnh sửa ini.
Pieter B

6

Để mở rộng đề xuất YAML của Jeff D , đây là phần giới thiệu ngắn gọn.

YAML tương tự như JSON (trên thực tế, JSON là một tập hợp con của YAML kể từ phiên bản 1.2 của tiêu chuẩn YAML và do đó JSON có thể được phân tích cú pháp bởi các trình phân tích cú pháp YAML). Thoạt nhìn, sự khác biệt chính là YAML (theo mặc định) sử dụng thụt đầu dòng thay vì đặt dấu ngoặc để hiển thị phân cấp. Ngoài ra còn thiếu dấu ngoặc kép đáng chú ý cho chuỗi. Một ví dụ nhanh từ phía trên:

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

Xem trang YAML của Wikipedia để biết ví dụ tốt hơn. Hỗ trợ cho YAML tồn tại cho hầu hết các ngôn ngữ chính (xem yaml.org để biết chi tiết).


3

Bạn đã quên một tùy chọn: Cơ sở dữ liệu. Điều này chủ yếu được sử dụng trong các tình huống mà bạn có người dùng đăng nhập vào ứng dụng của mình khi ứng dụng của bạn không thể dựa vào người dùng đã đăng nhập Windows. Đây là ví dụ khi ứng dụng của bạn đang chạy trong cửa sổ chế độ kiosk.


Bạn có thể cần một tệp INI hoặc khóa đăng ký để giữ chi tiết / chuỗi kết nối với cơ sở dữ liệu
Class Skeleton

@CamelCase Inifile hoặc khoá đăng ký đã được đề cập trong Câu hỏi, nhưng không phải Cơ sở dữ liệu. Tôi không có ý nói rằng bạn không thể sử dụng nhiều phương pháp cùng một lúc.
Pieter B

1

Sở thích cá nhân của tôi là các tệp XML:

Trong hầu hết các trường hợp, tôi không mong muốn người dùng phải chỉnh sửa cài đặt cấu hình của họ để vấn đề dễ đọc của con người không phải là một đối số trong trường hợp này.

Nếu họ cần chỉnh sửa chúng, bạn có thể cung cấp một công cụ chỉnh sửa - điều này ngăn người dùng thực hiện một cái gì đó với dữ liệu. Nếu họ muốn khôi phục cài đặt mặc định, bạn chỉ cần yêu cầu họ xóa tệp x mà hầu hết người dùng sẽ cảm thấy thoải mái khi thực hiện.

Lưu ý rằng bạn vẫn cần cẩn thận rằng bạn có quyền lưu trữ tệp của mình vì một số vị trí không có quyền truy cập ghi theo mặc định trong Windows 7, v.v.


INI Files là một cách lưu trữ cấu hình tiêu chuẩn tốt và đã được thử nghiệm và kiểm tra nhưng chúng chỉ cảm thấy một chút 'Windows 3.1' đối với tôi!

Có lẽ là tùy chọn tốt nhất nếu bạn muốn người dùng có thể sửa đổi dữ liệu của họ


Cá nhân tôi sẽ chỉ đạo ra khỏi sổ đăng ký. Đối với một điều bạn không thể đảm bảo rằng người dùng có quyền cần thiết để đọc / ghi vào bất cứ nơi nào bạn muốn lưu trữ dữ liệu của bạn.

Trong các hệ điều hành gần đây, nơi ảo hóa đăng ký xuất hiện, điều này có thể gây ra sự nhầm lẫn lớn vì bạn không thể 'nhìn thấy' các cài đặt ảo hóa - điều này đã cắn chúng tôi nhiều lần khi đã mất hàng giờ để tìm hiểu tại sao một cái gì đó không hoạt động.


3
Nếu bạn lo lắng về Quyền cho các vị trí đăng ký, thì có lẽ bạn đang cố lưu trữ chúng ở sai vị trí. Người dùng nên có quyền đối với tổ ong HKey_Civerse_User và đó là nơi cài đặt cho mỗi người dùng!
Neil White

@NeilWhite - đồng ý rằng họ nên có quyền nhưng một quản trị viên CNTT quá nhiệt tình có thể thay đổi điều này (hoặc cho đọc / ghi nhưng không tạo quyền). Ngoài ra, OP không đề cập rằng các cài đặt này nhất thiết phải có trên mỗi người dùng , chúng có thể là trên mỗi máy.
Matt Wilko

Ngoài ra, đăng ký có thể có giới hạn kích thước. Tập tin không.
linquize
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.