Konvertierung von 'const char*' in 'LPCTSTR' für CreateDirectory
#include "stdafx.h"
#include <string>
#include <windows.h>
using namespace std;
int main()
{
string FilePath = "C:\\Documents and Settings\\whatever";
CreateDirectory(FilePath, NULL);
return 0;
}
Fehler: error C2664: 'CreateDirectory' : cannot convert parameter 1 from 'const char *' in 'LPCTSTR'
- Wie mache ich diese Konvertierung?
- Der nächste Schritt ist, um das heutige Datum als string oder char-und verketten es mit dem Dateipfad. Wird sich dies ändern, wie mache ich Schritt 1?
- Ich bin schrecklich mit Datentypen und Konvertierungen, gibt es eine gute Erklärung für die 5 jährigen dort?
Ich würde es hassen, zu brechen, zu ya, aber C++ war nicht ausgerichtet ist, die 5-jährigen. 🙁
Und weder wurde die API-Programmierung.
Und weder wurde die API-Programmierung.
InformationsquelleAutor ProGirlXOXO | 2013-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
std::string
ist eine Klasse, die hältchar
-basierte Daten. Übergebenstd::string
Daten zu API-Funktionen, die Sie verwenden müssen, seinec_str()
Methode, um einenchar*
Zeiger auf die Zeichenfolge, die die tatsächlichen Daten.CreateDirectory()
dauertTCHAR*
als Eingabe. WennUNICODE
definiert ist,TCHAR
Karten zuwchar_t
, sonst ist es Karten zuchar
statt. Wenn Sie benötigen, um stick mitstd::string
aber nicht wollen, um Ihren code zuUNICODE
-bewusst, dann verwenden SieCreateDirectoryA()
statt, z.B.:Damit dieser code
TCHAR
-bewusst sind, können Sie dies tun, statt:Jedoch Ansi-basierenden OS-Versionen sind schon lange tot, alles ist heutzutage Unicode.
TCHAR
sollte nicht verwendet werden in neuem code nicht mehr:std::string
hält einechar
-basierte Strings.std::wstring
hält einewchar_t
-basierte Strings. Beide sind Spezialisierungen derstd::basic_string
.L
teilt dem compiler mit speichern der Literale in der Breite (wchar_t
) - format anstelle von engen (char
) - format. Holen Sie sich ein gutes C++ Buch, es behandelt diese Dinge. FürCreateDirectory()
ist es eigentlich eine precompiler-makro, die Karten zuCreateDirectoryW()
wennUNICODE
definiert ist, ansonsten ist es Karten zuCreateDirectoryA()
statt. Siehe Erklärung inwinbase.h
. Die meisten Win32-API-Funktionen, der Umgang mit string-Daten/W-Versionen erhältlich.InformationsquelleAutor Remy Lebeau
Wenn Sie nicht bauen eine Unicode-executable aufrufen
c_str()
auf die std::string wird in einemconst char*
(aka nicht-Unicode LPCTSTR), die Sie übergeben können, inCreateDirectory
().Würde der code wie folgt Aussehen:
Bitte beachten Sie, dass dies führt zu einem compile-Fehler, wenn Sie versuchen, erstellen Sie eine Unicode-executable.
Wenn Sie zum Anhängen an
FilePath
ich würde empfehlen, dass Sie entweder weiter verwendenstd::string
oder Microsoft verwendenCString
zu tun, die string-manipulation, wie das ist weniger schmerzhaft, dass es das C Weg und jonglieren mit rohen char*. Ich persönlich würde verwendenstd::string
es sei denn, Sie sind bereits in einer MFC-Anwendung, die verwendet CString.Das bedeutet, dass Sie kompilieren für Unicode, was bedeutet, dass
CreateDirectory()
ist die Zuordnung zuCreateDirectoryW()
, die einewchar_t*
als Eingabe. Sie können nicht übergebenstd::string
Daten zuCreateDirectoryW()
sind, sind Sie nicht kompatibel. Sie müssen entwederstd::wstring
konvertieren Sie stattdessen diestd::string
Daten zuwchar_t*
mitMultiByteToWideChar()
oder verwendenCreateDirectoryA()
statt.InformationsquelleAutor Timo Geusch