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

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

08.02.2010, 18:36

string kürzen

hi leute..
kann mir jemand sagen was ich hier falsch mache..?

über die windows shell bekomme den pfad über jene datei,
die der user anklickt..

ich möchte diesen pfad kürzen, damit ich nur noch das verzeichnis der datei habe..

zB:

C:\Spiele\MeinSpiel zu C:\Spiele\

C-/C++-Quelltext

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
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <windows.h>



LPWSTR getOperatingPath (LPWSTR full_path)
{
  LPWSTR  path    = NULL;

  size_t  to      = 0, 
          counter = wcslen(full_path);


  while ( full_path[counter] != '\\' )
    counter--;

  to    = wcslen(full_path) - (wcslen(full_path) -  counter);
  path  = new wchar_t(to);


  wcsncpy(path, full_path, to);
  path[to] = '\0';

  return path;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  size_t  size            = strlen(lpCmdLine) + 1;

  LPWSTR  path            = new WCHAR(size),
          operatingPath   = new WCHAR(size);
  

  MultiByteToWideChar(CP_ACP, NULL, 
                      lpCmdLine,  size, 
                      path,       size);


  operatingPath = getOperatingPath(path);

  CreateDirectory(operatingPath, NULL);

  return 0;
}
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

08.02.2010, 18:49

Sorry, aber das sieht schreklick aus..

Warum benutzt du keine Standardfunktionalitäten, wie std::wstring?

Dann bräuchtest du nicht so viel mit new zu arbeiten (was du offensichtlich falsch machst)

Im übrigen hast du versäumt uns zu erklären, wo genau das Problem liegt, sondern nur, was du haben möchtest.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

08.02.2010, 18:50

new WCHAR(size);

erstellt ein neues WCHAR, und initialisiert es mit "size"
du willst vermutlich ein array, das geht mit:

new WCHAR[size];

und das delete[] nicht vergessen ;)
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

4

08.02.2010, 18:54

Ich muss drakon zustimmen. Manuelle Speicherverwaltung verkompliziert die Sache hier nur. Gerade bei der Rückgabe von dynamisch angelegtem Speicher tun sich nur unnötige Probleme auf (z.B. wer gibt den Speicher frei?).

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

5

08.02.2010, 19:04

Ich weiß zwar auch nicht wirklich, was du erreichen willst, aber vielleicht bringt dir diese Seite was:

http://www.cplusplus.com/reference/clibrary/cstring/

mfg

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

09.02.2010, 13:10

Um das von meinen Vorrednern bereits Gesagte noch zu unterstreichen, hier eine mögliche Lösung unter Verwendung von std:wstring, um zu zeigen, wie einfach es sein kann:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
std::wstring getOperatingPath (const std::wstring& full_path)
{
    if ( full_path.length() < 2 )
        ; // Ungültiges Format!

    const size_t k = full_path.rfind( TEXT('\\'), full_path.length() - 2 );
    if ( k == full_path.npos )
        ; // Ungültiges Format!

    return full_path.substr( 0, k + 1 );
}


Ist gewährleistet, dass der Eingabe-String immer ein gültiges Format hat, könnte die Funktion noch weiter vereinfacht werden.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Werbeanzeige