2010-03-08 6 views
7

Wir machen ein Spiel, das bald eine Level-Editor-Funktion hinzufügen. Wir wollen, dass der Benutzer in der Lage seine Ebene legt er in einem Ordner heruntergeladen hat und es dann in dem Spiel spielen, ohne jede Hektik. Also, wir suchen nach einem Ordner, der niemanden finden können, öffnen, schreiben, lesen und ist Multi-User. Unter Windows Vista/7 sieht der Ordner/Users/Public/wie ein großer Kandidat aus. Es ist jedoch nicht in dem System Enum System.Environment.SpecialFolder aufgeführt. Ich habe sie alle durchgegangen und überprüft, was sie auf verschiedenen Windows-Versionen liefern, und keines erfüllt meine Anforderungen.Suche nach den besten Ordnern für alle Benutzer auf einem Windows-Rechner

Ich habe gefunden Environment.SpecialFolder.CommonApplicationData, das funktioniert, aber dieser Ordner ist ausgeblendet (C: \ ProgramData) und ich nehme an, die meisten Benutzer zeigen keine versteckten Ordner.

Wie es jetzt aussieht, sieht es aus wie wir für den persönlichen Dokumenten-Ordner begleichen müssen werden, aber wir würden wirklich wie ein Multi-User-Ordner.

Hat jemand irgendwelche Tipps?

(Hartcodierung c: Users \ Public \ \ indiskutabel ist, wird es nur auf Englisch Systemen arbeitet)

Antwort

8

Doug Hennig auf finding the path for C:\Users\Public:

Es gibt keine CSIDL Wert für diesen Ordner, aber die Umgebungsvariable PUBLIC Punkte, um es, so dass Sie GETENV ('PUBLIC') verwenden können, um zu bestimmen, seine Lage. Diese Variable enthält standardmäßig C: \ Users \ Public in Windows Vista. Die Variable existiert nicht in Windows XP, so dass Ihr Code den Fall handhaben müssen, wo GETENV (‚PUBLIC‘) einen leeren Wert zurückgibt.

Alternativ können Sie das übergeordnete Element des von CSIDL_COMMON_DOCUMENTS angegebenen Ordners verwenden, der C: \ Dokumente und Einstellungen \ Alle Benutzer \ Dokumente unter XP und C: \ Benutzer \ Öffentlich \ Dokumente unter Vista enthält.

Ich denke, Environment.SpecialFolder.CommonDocuments kann der richtige Ort für Ihre Dateien sein.

+0

Common der Anwendung arbeiten klingt fantastisch, aber es ist .net 4.0, und ich bin mit Mono 1.2.5 (die wie .net 2.0 ist), so dass ich Ich muss etwas wie das oben genannte machen. Vielen Dank. – reallyjoel

+0

CSIDL_COMMON_DOCUMENTS ist der entsprechende CSIDL-Wert. –

1

Könnten Sie einen Ordner in dem Verzeichnis der Anwendung setzen, dann eine Verknüpfung, um es für alle schaffen Benutzer (wenn sie das Feature zuerst verwenden) in ihrem Home-Verzeichnis? Ich weiß, es ist nicht ganz die „Universal“ bereits bestehenden Ordner, den Sie wollten, aber würde auf jeden Fall diese Arbeit?

+1

Sie müssten ein Administrator sein, mit dem Verzeichnis –

4

Folgendes sollte C:\Users\Public\Documents\ auf Vista/Win7 und C:\Documents and Settings\All Users\Documents für früheren OSes zurückzukehren.

[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

Das sieht sehr unheimlich aus. – reallyjoel

+1

Beachten Sie, dass standardmäßig alle Benutzer an diesen Speicherort schreiben können, Benutzer jedoch nicht in Dateien oder Ordner schreiben können, die von einem anderen Benutzer erstellt wurden. Wenn Sie möchten, dass mehrere Nicht-Administrator-Benutzer dieselbe Datei ändern können, müssen Sie die Berechtigungen explizit verwalten - unabhängig davon, wo Sie die Datei/den Ordner im Dateisystem erstellen. –

Verwandte Themen