Pfad per drag & drop in Konsolenfenster lesen
-
Hallo zusammen!
ich würde gerne eine Datei in die Konsole ziehen und diesen Pfad dann einlesen. Jetzt hab ich das so probiert:
char c[256]; cout << "Bitte Datei per Drag & Drop in die Konsole ziehen." << endl; cin.get(c,256);Beim ersten Mal funktioniert das auch super, will ich das dann aber mit der nächsten Datei machen erscheint der Pfad nicht mehr in der Konsole.
So hab ichs auch schon probiert:
string s; cout << "Bitte Datei per Drag & Drop in die Konsole ziehen." << endl; cin >> s;Dabei steht in s nachher aber nur der halbe Pfad

Das Problem ist bestimmt total simpel, aber ich steh echt aufm Schlauch

Schon mal vielen Dank für Eure Hilfe!

-
std::string c; std::cout << "Bitte Datei per Drag & Drop in die Konsole ziehen." << std::endl; std::getline(std::cin,c);
-
Ne Manni, vor einem
'\n'bekommtstd::cinnichts zu sehen - und bei einer solchen Drag&Drop-Operation wird keines mitgeschickt. Der Benutzer müsste selbst Enter drücken.Mit Standard C++ wird das nichts. Bei "Konsolenfenster" geh ich einfach mal von Windows aus.
Möglichkeiten, die einem in den Sinn kommen könnten:
- Das Konsolenfenster subclassen und selbst auf WM_DROPFILES reagieren. Njet. Subklassen kann man nur Fenster, die dem eigenen Prozess gehören. Das Konsolenfenster gehört deinem Prozess aber nicht.
- Cross-Process "Subclassing" mit Hooks. Grausig, und ich weiß nicht, ob das mit Konsolenfenstern funktioniert.
- Ein eigenes transparentes Fenster über die Konsole legen. Hässlich.
Was funktioniert:
Davon ausgehen, daß Pfade die Leerzeichen enthalten in "" eingeschlossen sind, und bei anderen darauf spekulieren, daß die Zeichenfolge per Drag&Drop in einem Rutsch kommt:#include <vector> #include <string> #include <iostream> #include <conio.h> int main() { std::cout << "Bitte Dateien per Drag & Drop in die Konsole ziehen. (Beenden mit [Enter].)\n"; std::vector< std::string > files; for( int ch = _getch(); ch != '\r'; ch = _getch() ) { std::string file_name; if( ch == '\"' ) { // path containing spaces. read till next '"' ... while( ( ch = _getch() ) != '\"' ) file_name += ch; } else { // path not containing spaces ... read as long as characters are coming rapidly ... file_name += ch; while( _kbhit() ) file_name += _getch(); } files.push_back( file_name ); } std::cout << "Sie haben folgende Dateien in das Konsolenfenster gezogen:\n"; for( auto & i : files ) std::cout << i << '\n'; }PS: Vergiss char-Arrays für Zeichenketten. Nimm
std::string!