2010-03-08 41 views
7

Chúng tôi đang tạo một trò chơi sẽ sớm thêm tính năng trình chỉnh sửa cấp. Chúng tôi muốn người dùng có thể đặt các cấp anh ấy đã tải xuống trong một thư mục và sau đó phát các trò chơi đó trong trò chơi mà không gặp bất kỳ rắc rối nào. Vì vậy, chúng tôi đang tìm kiếm một thư mục mà bất kỳ ai cũng có thể tìm thấy, mở, viết, đọc và là người đa tài. Trên Windows Vista/7, thư mục/Users/Public/trông giống như một ứng cử viên tuyệt vời. Tuy nhiên, nó không được liệt kê trong .net enum System.Environment.SpecialFolder. Tôi đã đi qua tất cả, và kiểm tra những gì họ mang lại trên các phiên bản Windows khác nhau, và không ai sống theo yêu cầu của tôi.Tìm thư mục tốt nhất cho tất cả người dùng trên máy Windows

Tôi đã tìm thấy Environment.SpecialFolder.CommonApplicationData, loại đó hoạt động, nhưng thư mục đó bị ẩn (C: \ ProgramData) và tôi giả định hầu hết người dùng không hiển thị các thư mục ẩn.

Hiện tại, có vẻ như chúng tôi sẽ phải giải quyết thư mục tài liệu cá nhân, nhưng chúng tôi thực sự thích thư mục đa người dùng.

Bất kỳ ai cũng có bất kỳ mẹo nào?

(cứng mã hóa c: \ Users \ Public \ là ra câu hỏi, nó sẽ chỉ làm việc trên hệ thống tiếng Anh)

Trả lời

8

Doug Hennig trên finding the path for C:\Users\Public:

Không có một giá trị CSIDL cho thư mục này, nhưng môi trường điểm CÔNG biến với nó, vì vậy bạn có thể sử dụng getenv ('CÔNG') để xác định của nó vị trí. Theo mặc định, biến này chứa C: \ Users \ Public trong Windows Vista. Biến không tồn tại trong Windows XP, vì vậy mã của bạn phải xử lý trường hợp GETENV ('PUBLIC') trả về một giá trị trống.

Ngoài ra, bạn có thể sử dụng phụ huynh của thư mục được chỉ định bởi CSIDL_COMMON_DOCUMENTS, cung cấp C: \ Documents and Settings \ Tất cả người dùng \ Documents trên XP và C: \ Users \ Public \ Documents trên Vista.

Tôi nghĩ Environment.SpecialFolder.CommonDocuments có thể là nơi thích hợp cho tệp của bạn.

+0

CommonDocuments của ứng dụng âm thanh tuyệt vời, tuy nhiên nó .net 4.0, và tôi đang sử dụng mono 1.2.5 (mà cũng giống như .net 2.0), vì vậy tôi sẽ phải làm mọi thứ như trên. Cảm ơn. – reallyjoel

+0

CSIDL_COMMON_DOCUMENTS là giá trị CSIDL thích hợp. –

1

bạn có thể đặt một thư mục trong thư mục của ứng dụng, sau đó tạo một shortcut cho nó cho mỗi người dùng (khi họ lần đầu tiên sử dụng tính năng) trong thư mục chính của họ? Tôi biết nó không hoàn toàn là thư mục có sẵn "Universal" mà bạn có thể muốn, nhưng liệu nó có hoạt động không?

+1

Bạn sẽ cần phải là người quản trị để làm việc với thư mục –

4

Sau đây sẽ trả về C:\Users\Public\Documents\ trên Vista/Win7 và C:\Documents and Settings\All Users\Documents cho hệ điều hành trước đó.

[System.Runtime.InteropServices.DllImport("shell32.dll")] 
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, 
uint dwFlags, [Out] StringBuilder pszPath); 

public string GetSharedDocsFolder() { 
StringBuilder sb = new StringBuilder(); 
int CommonDocumentsFolder = 0x002e; 

SHGetFolderPath(IntPtr.Zero, CommonDocumentsFolder, IntPtr.Zero, 0x0000, sb); 
return sb.ToString(); 
} 
+0

Điều đó có vẻ đáng sợ .. – reallyjoel

+1

Lưu ý rằng theo mặc định, tất cả người dùng có thể ghi vào vị trí này, nhưng người dùng không thể ghi vào tệp hoặc thư mục được tạo bởi người dùng khác. Nếu bạn muốn nhiều người dùng không phải quản trị viên có thể sửa đổi cùng một tệp, bạn phải quản lý quyền một cách rõ ràng - bất kể bạn tạo tệp/thư mục trong hệ thống lưu trữ ở đâu. –

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