Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 05:38

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



WIN32_FIND_DATA

Discussion on WIN32_FIND_DATA within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1

 
Halfbax's Avatar
 
elite*gold: 51
Join Date: Nov 2008
Posts: 486
Received Thanks: 69
WIN32_FIND_DATA

Guten morgen,

ich habe mich versuch zu informieren, aber bisher konnte ich keine Lösung zu meinem Problem erarbeiten. Grob gesagt, ich kriege eine sehr komische Ausgabe.

Fangen direkt mit dem Code an.
Code:
std::string fullPath = path + "/S4 Bot/Log/";
std::string fileName[256];

HANDLE myHandle;
WIN32_FIND_DATA findData;
myHandle = FindFirstFile((LPCWSTR)(fullPath + "*.log").c_str(), &findData);
do {
	if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
		cout << "Directoryname is " << findData.cFileName << endl;
	}
	else {
		std::cout << "Filename is " << *findData.cFileName << std::endl;
	}
} while (FindNextFile(myHandle, &findData));
Meine Ausgabe ist ohne die Dereferenzierung: Filename is 004FDB48.
Wenn du es nun deferenziere, folgt diese Ausgabe: Filename is 52428.

Ich weiß, leider nicht mehr weiter. Mir wurde vorgeschlagen, das Ganze als wchar handzuhaben, aber das hat leider auch keinen Erfolg gegeben, aber vielleicht lag das auch nur an meine herangehensweise.

Mit freundlichen Grüßen,
Halfbax
Halfbax is offline  
Old 03/29/2016, 09:55   #2


 
Jeoni's Avatar
 
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
Ja, generell solltest du die Unterscheidung zwischen Widechar (wie auch immer du es nennen willst) und Ascii machen. Sowohl der normale std::string, wie auch das std::cout sind ausschließlich Ascii. Heißt ein Byte pro Zeichen. Widechar bedeutet zwei Byte pro Zeichen (damit lassen sich dann natürlich auch exotischere Zeichen darstellen).
Das
Code:
(LPCWSTR)(fullPath + "*.log").c_str()
und
Code:
cout << "Directoryname is " << findData.cFileName << endl;
recht sinnlos sind, sollte eigentlich klar sein (Mix von Ascii und Widechar). Und was das Dereferenzieren soll, ist mir auch nicht ganz klar. Dass dort aber 0xCCCC rauskommt, wundert mich nicht. Ich vermute, dass schon FindFirstFile fehlgeschlagen ist (weil halt das erste Argument Müll ist), aber da gibt es ja keinen Check, der das abfängt. Der cFileName-Member der Struktur ist mit der Projektkonfiguration bzw. den benutzten Defines ebenfalls Widechar, da die entsprechenden W-Strukturen aus Windows benutzt werden statt die A-Strukturen.
Möglichkeiten:
1) Alles Widechar. Statt std::string dann std::wstring und statt std::cout dann std::wcout nutzen. Weiterhin, wie aktuell auch, die Widechar-Funktionen der Winapi nutzen.
2) Alles Ascii. std::string und std::cout bleiben und entweder du stellst in den Projekteinstellungen irgendwo von "Unicode" auf "Multibyte" oder benutzt ganz explizit die A-Versionen der Funktionen und Strukturen (FindFirstFileA, WIN32_FIND_DATAA, etc.).
Mit freundlichen Grüßen
Jeoni
Jeoni is offline  
Old 03/29/2016, 11:29   #3

 
Halfbax's Avatar
 
elite*gold: 51
Join Date: Nov 2008
Posts: 486
Received Thanks: 69
Durch das Changen auf die A Funktionen, hat das Ganze geklappt . Hatte daran garnicht gedacht, auf den Kopf des Ganzen zu achten. Ich bin manchmal echt ein dulli.

Ich danke und schönen dir einen schönen Tag.

Liebe Grüße,
Halfbax
Halfbax is offline  
Old 03/29/2016, 19:28   #4



 
+Yazzn's Avatar
 
elite*gold: 420
Join Date: Jan 2012
Posts: 1,030
Received Thanks: 982
std::tr2::sys aus dem <filesystem> header pls
+Yazzn is offline  
Reply




All times are GMT +2. The time now is 05:38.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.