Get Filename from URL?
-
Hallo,
wie kann ich den aufgrund einer URL den Dateinamen herausfinden?Beispiel:
forum.aerosoft.com/index.php?/files/download/1817-airbus-a320-cfm-ltu-d-alpq/ -> A320_CFM_LTU_D-ALPQ.zipVielen Dank
Johannes
-
Du musst doch nur das letzte '\' suchen
Alternativ std::string und rfind.
-
Nach was für einem '\' soll ich den bitte in "forum.aerosoft.com/index.php?/files/download/1817-airbus-a320-cfm-ltu-d-alpq/" suchen damit ich "A320_CFM_LTU_D-ALPQ.zip" bekomme???
-
Anhand der URL bekommst Du das nicht raus. Du musst schon eine Anfrage an den Web-Server senden, der dier dann im Header bzw. in den MIME-Daten den Dateinamen mitliefert...
-
Das sieht dann ungefähr so aus (mittels IE9, F12 ermittelt):
Antwort HTTP/1.1 200 OK
Date Tue, 08 Jan 2013 16:27:29 GMT
Server Apache
Set-Cookie session_id=9837ba4d034d56b35087659c590f552e; path=/; httponly
Last-Modified Tue, 08 Jan 2013 16:27:29 GMT
Pragma public
Cache-Control public, max-age=30
Accept-Ranges bytes
Content-Length 17755011
Content-Transfer-Encoding binary
Content-Range bytes 0-17755010/17755011
Content-Disposition attachment; filename="A320_CFM_LTU_D-ALPQ.zip"
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type application/zip
-
Vielen Dank für die Antwort, wie mache ich das den am einfachsten in c++?
-
Wininet... InternetOpenUrl und konsorten...
-
Vielen Dank, ich hab's jetzt!!!
bool GetInternetFileName(wstring Url, wstring &FileName) { FileName = L""; HINTERNET hInternet = NULL; HINTERNET hFile = NULL; DWORD dwDummy; hInternet = InternetOpen(L"FileNameRequester", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if(!hInternet) { return false; } hFile = InternetOpenUrl(hInternet, Url.c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0); if(!hFile) { InternetCloseHandle(hInternet); return false; } wchar_t filename[MAX_PATH] = L""; dwDummy = MAX_PATH; if(!HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_DISPOSITION, (LPVOID)filename, &dwDummy, NULL)) { InternetCloseHandle(hFile); InternetCloseHandle(hInternet); return false; } FileName = filename; if(FileName.find(L"\"") != wstring::npos) { FileName = FileName.substr(FileName.find(L"\"")+1, FileName.length()-FileName.find(L"\"")-2); } else { InternetCloseHandle(hFile); InternetCloseHandle(hInternet); return false; } InternetCloseHandle(hFile); InternetCloseHandle(hInternet); return true; }