2009-10-12 21 views
24

Tôi nên lưu dữ liệu liên quan đến đơn đăng ký của mình ở đâu? Tôi nên lưu tệp cấu hình ở đâu? Tôi nên lưu các tệp tạm thời ở đâu? Tôi có nên làm điều đó trong "Tài liệu" không? "Dữ liệu chương trình"? Vv ...Là nhà phát triển, tôi nên sử dụng các thư mục đặc biệt trong Windows Vista (và Windows 7) như thế nào?

Phương pháp hay nhất để lưu dữ liệu vào đĩa (tôi đoán, thực hành tốt nhất cho các thư mục đặc biệt ?!)?

Trả lời

26

ApplicationData: Mọi thứ mà ứng dụng của bạn cần là dữ liệu "cho mỗi người dùng" và không thuộc các danh mục khác. Các tệp cấu hình chuẩn sẽ xuất hiện ở đây.

CommonApplicationData: Mọi thứ không phải là dữ liệu "cho mỗi người dùng".

LocalApplicationData: Dữ liệu cho mỗi người dùng và không chuyển vùng. Ví dụ, mọi thứ bạn muốn bảo đảm rằng nó chỉ được lưu trữ trên máy tính này (như mã kích hoạt máy, cũng thường là bộ nhớ cache/dữ liệu tạm thời). Tệp tạm thời chuẩn sẽ xuất hiện ở đây.

MyDocuments: Dữ liệu người dùng thực sự sẽ xác định là "tài liệu đơn có thể nhận dạng".

Nếu bạn không quan tâm đến tên tệp, bạn cũng có thể sử dụng API tempfile để tạo tệp tạm thời trong thư mục temp. Bạn KHÔNG nên làm điều này bằng tay. Ví dụ: .NET bạn có thể sử dụng Path.GetTempFileName() cho mục đích đó.

+1

+1 cho câu trả lời hữu ích, đặc biệt liên quan đến phân biệt "cho mỗi người dùng". Nhưng tôi không rõ ràng về những cái tên in đậm là ... tên chữ của các thư mục? không ... thư viện? một loại trừu tượng mà .NET sử dụng để chỉ các thư mục? – LarsH

+2

@LarsH: "Nhưng tôi không rõ ràng về những tên in đậm là ..." Họ là .Net Environment.SpecialFolder liệt kê hằng số - hãy thử nhấp vào chúng. :-) – RenniePet

+0

@RenniePet: kthx. :-) – LarsH

1

AppData phải là cấu hình tự động và cấu hình, tài liệu chỉ nên là tệp do người dùng lưu. Tôi sẽ đặt bất cứ điều gì có thể hữu ích trong nhiều hệ thống trong AppData/Roaming, và bất cứ điều gì khác (máy cụ thể) trong AppData/Local hoặc LocalLow. Đối với các tệp tạm thời, hãy sử dụng thư mục Temp.

+0

Tôi đồng ý. Tôi ghét nó khi ứng dụng tôi cài đặt tạo các thư mục và/hoặc lưu trữ các tệp trong (Tài liệu của tôi). –

+0

Bạn có thể dịch câu trả lời của mình theo điều kiện của Environment.SpecialFolder? Environment.GetFolderPath (Environment.SpecialFolder.xxx) – Nestor

1

Nói chung, các phương pháp hay nhất của Windows là tuân theo các biến môi trường thích hợp. Dữ liệu cấu hình mà bạn muốn gắn bó nên đi vào% APPDATA% và các tệp tạm thời phải ở% TEMP%.

Điều này có lợi thế là không phá vỡ khủng khiếp nếu Windows thay đổi mọi thứ và tôn trọng các cấu hình lạ mà mọi người có thể có.

Ngoài ra, tôi đồng ý với các câu trả lời khác rằng "Tài liệu" chỉ nên cho dữ liệu do người dùng tạo và chỉ sau lời nhắc.

10

Từ Windows 7 Client Software Logo Program:

  • Ứng dụng nên được cài đặt vào thư mục Program Files theo mặc định. Dữ liệu người dùng hoặc dữ liệu ứng dụng không bao giờ được lưu trữ ở vị trí này vì các quyền bảo mật % ProgramFiles% cho các ứng dụng 32 bit và 64 bit gốc và% ProgramFiles (x86)% cho các ứng dụng 32 bit chạy trên x64 tương ứng. dữ liệu và cài đặt khác.
  • Tất cả dữ liệu ứng dụng phải được lưu trữ trong người dùng trên máy tính phải được lưu trữ trong ProgramData
  • Tất cả dữ liệu ứng dụng dành riêng cho người dùng cụ thể và không được chia sẻ với người dùng khác của máy tính phải được lưu trữ trong Users \\ AppData
  • Không bao giờ viết trực tiếp vào thư mục "Windows" và thư mục con.Sử dụng các phương pháp chính xác để cài đặt các tệp, chẳng hạn như phông chữ hoặc trình điều khiển
  • Trong cài đặt “trên mỗi máy”, dữ liệu người dùng phải được ghi vào lần chạy đầu tiên chứ không phải trong khi cài đặt. Điều này là do không có vị trí người dùng chính xác để lưu trữ dữ liệu tại thời điểm cài đặt. Những nỗ lực của một ứng dụng để sửa đổi các hành vi kết hợp mặc định ở mức máy sau khi cài đặt sẽ không thành công. Thay vào đó, các giá trị mặc định phải được xác nhận quyền sở hữu ở cấp độ cho mỗi người dùng, điều này ngăn nhiều người dùng ghi đè các giá trị mặc định của nhau.
0

Ngoài ra, bạn nên sử dụng SHGetFolderPath hoặc SHGetKnownFolderPath (trong Vista +) để nhận đường dẫn. Điều này sẽ cung cấp cho bạn vị trí chính xác trên hệ thống hiện tại bất kể phiên bản hoặc ngôn ngữ của cài đặt hiện tại. Không bao giờ mã cứng bất kỳ đường dẫn nào bạn đang sử dụng.

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