Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

23.07.2006, 21:20

Helmut
Quatsch. Jeder Depp kann den Benutzer abfragen und einen Ordner für diesen im Spielordner erstellen. Maximal 5 Code-Zeilen.

Anonymous

unregistriert

12

23.07.2006, 21:38

Hmpf, irgendwie geht mal wieder edit nicht.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createdirectory.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getenvironmentvariable.asp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
    // Buffer für den Benutzernamen

wchar_t buffer[512] = L"";

    // Benutzernamen lesen aus den Umgebungsvariablen.

if (::GetEnvironmentVariableW (L"username", buffer, 512) == 0)
    return (error_invalid_api_call);

    // Ordner erstellen

if (!::CreateDirectoryW (buffer, NULL))
    return (error_invalid_api_call);


Ist doch nun wirklich keine Kunst, selbst für die Deppen von EA sollte dies Möglich sein.

p.s.: Ich weiß jetzt nicht mehr auf anhieb ob CreateDirectory einen relativen Pfad verträgt oder ob dieser Absolut sein muß. Aber für sowas gibt es ja:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getcurrentdirectory.asp

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

13

23.07.2006, 21:38

Es war auch meine Absicht, alles in dem Ordner "My Games" abzulegen. Heroes of Might and Magic V hat mich da inspiriert. Fande es nicht schlecht, vorallem weil dann das Spiel auch Benutzerabhängig genutzt werden kann, was ich als Vorteil sehe. Könnte man auch anders lösen, klar - aber das fande ich halt nicht schlecht.

@nix da
Danke, die Idee mit dem set Befehl war der Denkanstoss. Ich würde den set-Befehl in eine Datei umleiten und von dort aus auslesen. Eleganter geht es nicht, oder?
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Anonymous

unregistriert

14

23.07.2006, 21:39

Zitat von »"riCo"«

Danke, die Idee mit dem set Befehl war der Denkanstoss. Ich würde den set-Befehl in eine Datei umleiten und von dort aus auslesen. Eleganter geht es nicht, oder?
Guck mal meinen Post wie Elegant das gehen kann :roll:

riCo

Treue Seele

  • »riCo« ist der Autor dieses Themas

Beiträge: 165

Beruf: Student

  • Private Nachricht senden

15

23.07.2006, 21:40

Gleichzeitig gepostet.. :D

Danke für den Code!
Wir leben alle unter dem Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.

Anonymous

unregistriert

16

23.07.2006, 21:41

Wie schon gesagt, ist nur schnell ausm Kopf gemacht worden! Also nicht getestet, probiers einfach mal.

Anonymous

unregistriert

17

23.07.2006, 21:46

Kann man jemand nach der Edit-Funktion gucken? Ich bekomm da immer nen SQL-Error :shock:

Ach ja, hab grade gelesen das die Funktion auch Fehlschlägt wenn der Ordner existiert! Dafür prüft man dann noch GetLastError:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
    // Buffer für den Benutzernamen 

wchar_t buffer[512] = L""; 

    // Benutzernamen lesen aus den Umgebungsvariablen. 

if (::GetEnvironmentVariableW (L"username", buffer, 512) == 0) 
    return (error_invalid_api_call); 

    // Ordner erstellen 

if (!::CreateDirectoryW (buffer, NULL) && ::GetLastError () != ERROR_ALREADY_EXISTS) 
    return (error_invalid_api_call);

Easy? Easy!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

23.07.2006, 22:24

edit dürfte gehen, zumindest gehts bei mir

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

19

24.07.2006, 12:51

GetUserName ist noch einfacher.

Und wegen dem Pfad von Eigene Dateien gibt es SHGetSpecialFolderLocation
Allerdings ein Krampf das Ding aufzurufen. Früher hab ich mal ne Wrapperfunktion geschrieben/abgeschrieben:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
bool MyGetSpecialFolder(int nFolder, char* Dir)
{
    LPMALLOC      ShellMalloc;
    LPITEMIDLIST  DirPidl;

    // We are going to create a pidl, and it will need to be
    // freed by the shell mallocator. Get the shell mallocator
    // object using API SHGetMalloc function. Return if failure.
    if(FAILED(SHGetMalloc(&ShellMalloc)))
        return false;

    // use the API to get a pidl for the desktop directory
    // if function fails, return without proceeding
    if(FAILED(SHGetSpecialFolderLocation(0, nFolder,
                                         &DirPidl)))
        return false;

    // Now convert the pidl to a character string
    // return if function fails
    if(!SHGetPathFromIDList(DirPidl, Dir))
    {
        ShellMalloc->Free(DirPidl);
        ShellMalloc->Release();
        return false;
    }

    // At this point, we are done with the pidl and the
    // mallocator, so free them up
    ShellMalloc->Free(DirPidl);
    ShellMalloc->Release();
    return true;
}

Die nFolder Codes gibt es hier
Allerdings ist die Funktion bufferoverflowgefährdet:)
Nix da wird aber sicher gleich eine Secure Version schreiben:)

Ciao

Anonymous

unregistriert

20

24.07.2006, 18:37

Jo werd ich nachher machen, nachm Essen ^^

Werbeanzeige