Tworzenie folderu za pomocą CreateDirectory

0
bool MakeDir(string&  path)
	{
		return (bool)CreateDirectory(path.c_str(), NULL) 
		|| GetLastError() == ERROR_ALREADY_EXISTS;
	}

No i własnie, dlaczego to nie działa? Pierwszy raz tworzę folder w C++, a taki wzór znalazłem w sieci.
Wyskakuje mi błąd "Cannot convert rvalue of type 'const char*' to parametr type 'LPCWSTR'"

0

Zapewne w projekcie zdefiniowane jest "środowisko" Unicode, więc CreateDirectory w istocie jest makrem rozwijanym do funkcji CreateDirectoryW. A funkcja ta z kolei jako parametr przyjmuje C-stringa unicodowego, czyli wskaźnik na wchar_t. W wolnym tłumaczeniu LPCWSTR będzie definiowane jako WCHAR*.

Możesz zmienić ustawienia projektu na Multibyte char z Unicode, użyć szerokiego stringa, czyli std::wstring, lub bezpośrednio odwoływać się do funkcji WinAPI z postfixem zależnym od potrzebnego formatu. W Twoim wypadku do wersji ANSI, czyli CreateDirectoryA.

0
malcom napisał(a):

Możesz zmienić ustawienia projektu na Multibyte char z Unicode, użyć szerokiego stringa, czyli std::wstring, lub bezpośrednio odwoływać się do funkcji WinAPI z postfixem zależnym od potrzebnego formatu. W Twoim wypadku do wersji ANSI, czyli CreateDirectoryA.

Oczywiście właściwym rozwiązaniem jest użycie wstringa, a nie przerabianie kodu na ANSI.

bool MakeDir(const wstring &path)
{
    return (bool)CreateDirectory(path.c_str(), NULL) 
        || GetLastError() == ERROR_ALREADY_EXISTS;
}
0

Moim zdaniem to jest zależne od projektu i istniejącego kodu.
Jeśli nie jest to typowa aplikacja Win32, a operująca głównie na zwykłych stringach i sporadycznie korzystająca z funkcji WinAPI do pewnych specyficznych operacji (np. nie dostępnych w standardowej) to przerabianie wszystkiego w druga stronę na wstring-i niekoniecznie będzie najlepsza opcją ;)

0
malcom napisał(a):

Moim zdaniem to jest zależne od projektu i istniejącego kodu.
Jeśli nie jest to typowa aplikacja Win32, a operująca głównie na zwykłych stringach i sporadycznie korzystająca z funkcji WinAPI do pewnych specyficznych operacji (np. nie dostępnych w standardowej) to przerabianie wszystkiego w druga stronę na wstring-i niekoniecznie będzie najlepsza opcją ;)

Wszystko co w bibliotece standardowej można zrobić na stringu, można też na wstringu.
Jeśli jest to aplikacja z założenia działająca pod Windows (a nie wieloplatformowa), zalecane jest używanie wstring/wchar_t*, który pod Windows oznacza kodowanie UTF-16.

1 użytkowników online, w tym zalogowanych: 0, gości: 1