2013-12-16 15 views
5

Khi tôi cố gắng để mở tập tin cấu hình ứng dụng của tôi bởiTạo tập tin cấu hình ứng dụng nếu không tồn tại C#

ConfigurationManager.OpenExeConfiguration(filePath); 

nó sẽ trả về một ngoại lệ, vì không có tập tin. Nhưng tôi cần phải tạo tập tin này trong trường hợp này. Nhưng như tôi biết, hãy tạo tệp cấu hình bằng cách thêm tại VS như How to: Add an Application Configuration File to a C# Project

Vậy, cách tạo tệp này theo cách khác?

+0

Tại sao bạn có tập tin cấu hình thùng nếu người dùng đã xóa nó? Kiểm tra xem tệp tồn tại trước khi mở nó (hoặc xử lý ngoại lệ) và sử dụng giá trị mặc định nếu cấu hình không tìm thấy –

+0

Tôi nghĩ rằng, người dùng không xóa nó. Tệp không tồn tại ở đầu. –

+0

Nó chỉ là một tập tin văn bản - bạn có thể tạo nó giống như bất kỳ tập tin văn bản nào khác. Nhưng cách _proper_ là bao gồm nó trong dự án của bạn tại _design time_. –

Trả lời

11

Nếu bạn thực sự muốn tạo một tập tin cấu hình sản phẩm nào khi chạy bạn có thể làm một cái gì đó như thế này, nhưng lưu ý rằng nếu tập tin cấu hình đã tồn tại mã này sẽ ghi đè lên nó:

System.Text.StringBuilder sb = new StringBuilder(); 
sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); 
sb.AppendLine("<configuration>"); 
sb.AppendLine("</configuration>"); 

string loc = Assembly.GetEntryAssembly().Location; 
System.IO.File.WriteAllText(String.Concat(loc, ".config"), sb.ToString()); 
+1

"sb.toString()" phải là "sb.ToString()", nếu không câu trả lời hoàn hảo. Cảm ơn! –

+1

Bắt tuyệt vời @RobVermeulen, cảm ơn! Tôi đã chỉnh sửa câu trả lời. –

+0

Đây là câu trả lời một nửa. – drowa

2

Chỉ cần vào App.config thuộc tính tập tin và thay đổi Copy to Output mục thiết lập từ Đừng sao chép-Sao chép luôn (hoặc Sao chép nếu mới hơn). Điều đó sẽ tự động tạo tệp cấu hình trong khi xây dựng dự án.

+0

Làm thế nào để tạo 'myapp.exe.config' nếu không có' App.config' trong dự án? –

+0

@ArtemKyba tại sao không chỉ cần thêm 'App.config' vào dự án? –

+0

Khách hàng muốn mà không cần thêm :) –

1

Tệp này là cần thiết bởi ứng dụng của bạn khi bạn cần truy cập nó. Cách tốt nhất là thêm nó bằng Visual Studio khi bạn viết nó. Bạn phải đảm bảo rằng nó được triển khai đúng trên máy mục tiêu lúc thiết lập.

Sau đó, nếu nó không có trên đĩa trong thời gian chạy, đó là một hành vi tốt để gặp sự cố. Bạn có thể hiển thị một tin nhắn cho người dùng (bắt ngoại lệ).

1

Tại sao bạn muốn tạo theo cách khác? Là nó để đảm bảo rằng bạn luôn luôn có một tập tin cấu hình, ngay cả khi người dùng xóa nó? Và tại sao một người dùng sẽ làm điều đó? Đưng bận tâm.

Nếu bạn muốn chắc chắn luôn có một tập tin cấu hình, bạn có thể tạo ra nó cho mình nếu nó không phải là ở đó: file

if (!File.Exists(configFilePath)) ... 

Config chỉ là XML. Vì vậy, bạn có thể tạo một tệp mới và điền nó với dữ liệu mặc định, ngay trước khi bạn muốn đọc một khóa từ nó.

Tuy nhiên, người dùng mong muốn người dùng không xóa tệp cấu hình. Chỉ cần nói.

+0

Loại giải pháp này luôn có mùi giống như điều kiện chủng tộc; .NET Framework bỏ qua TxF. – drowa

Các vấn đề liên quan