2010-04-06 34 views
6

Không hoàn toàn là một câu hỏi lập trình, nhưng nó đủ gần để ở đây đi:Windows Application Thư mục Dữ liệu

Trong Mac OS tôi sẽ đưa các tập tin người dùng cụ thể cho ứng dụng của tôi trong ~/Library/Application Data/{MyApp}/ và trong * nix tôi sẽ đặt chúng trong số ~/.{MyApp}/ - tôi nên đặt chúng cho Windows ở đâu?

Tôi sẽ sử dụng số File.expand_path của Ruby để truy cập vào thư mục này, vì vậy nếu có cửa sổ tương đương ~ thì tốt.

(Answers cho Windows XP, Vista và 7 sẽ được đánh giá nếu họ không giống nhau)

Trả lời

3

Cách thực hiện việc này trên Windows là sử dụng biến môi trường ApplicationData. Nếu bạn đang sử dụng C#, bạn có thể nhận được thư mục mà nó ánh xạ tới bằng cách sử dụng System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), googling tương đương với Ruby là ENV['APPDATA']. Trong Windows tiếng Anh nó ánh xạ tới:

C:\Users\%username%\AppData\Roaming\ (trên Vista và Windows 7)

C:\Documents and Settings\%username%\Application Data\ (Trên XP)

Nó có thể lập bản đồ vào một thư mục khác nhau trong các ngôn ngữ khác, nhưng miễn là bạn lấy thư mục từ biến môi trường và không mã hóa nó sau đó nó không thực sự tạo ra sự khác biệt. Nếu bạn tạo một thư mục trong đó cho ứng dụng của bạn và lưu trữ dữ liệu ở đó, Vista và 7 sẽ cho phép đọc và ghi truy cập vào nó mà không đưa ra lời nhắc UAC.

+1

Chỉ cần xin vui lòng không mã cứng đường dẫn mà miket2e được liệt kê - thay vì sử dụng Environment.SpecialFolder.ApplicationData cho ứng dụng .net hoặc ShGetFolderPath (NULL, CSIDL_APPDATA, NULL, ...) cho các ứng dụng cửa sổ gốc. –

+0

Và trong Ruby? Tại thời điểm này tôi sẽ phải hard-code ~/AppData/MyApp như tôi biết không có cách nào để thư mục dữ liệu ứng dụng trong Ruby! –

0

sửa soạn trước, tôi không chắc chắn như thế nào của Ruby xử lý expand_path trên ~ cho Windows. Windows có các chức năng như SHGetSpecialFolderPathSHGetSpecialFolderLocation cho loại điều này. Nó sẽ có vẻ như một điều rõ ràng cho expand_path để sử dụng một trong số đó, nhưng tôi không biết liệu nó có chắc chắn không.

+1

Một nit, nhưng SHGetSpecialFolderPath không được hỗ trợ cho ShGetFolderPath (http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx). –

+0

@Larry: Tốt điểm - tôi nên đã đề cập đến điều đó. Cảm ơn bạn đã thêm nó. –

0

Đối với Vista và Windows 7 và Windows XP,

char appdir[MAX_PATH];  
    size_t requiredSize; 
    errno_t err= getenv_s(&requiredSize, appdir, MAX_PATH, "appdata"); 

có vẻ đơn giản hơn là sử dụng API không hoặc những người không làm việc trên Windows XP.

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