Jag vill ta reda på mitt egna programs 'path' men lyckas inte hitta någon funktion som klarar det utan att veta filnamnet. Detta är ett Win32 program och jag använder inte MFC (om det har någon betydelse). Det här hjälper inte dej direkt men generellt sett så ska du inte spara data bredvid programmet, utan i någon lämplig data katalog. (sen kan också nämnas att Vista kommer att bråka med dej om du försöker spara stuff under "Program Files" ...) Kämpade länge med att ta reda på varför ena fopen bråkade med mig och det visade sig att på grund av att jag inte hade någon genväg utan bara "Fil.txt" så sparade programmet bara information i ena text-filen och gjorde inget med den andra. När jag sedan manuellt la in C:\Fil.txt så fungerade båda och detta krävs ju något mer automatiserat. argv[0] är ju sökvägen (inklusive programnamnet). Använder du WinMain så antar jag att lpszArgument kanske är något. Men, fopen fungerar så (vilket de flesta implmenterade filoperationsfunktioner gör) att den letar i den lokala mappen först och sedan i systemmapparna (typ system32, windows), den kollar i path också antar jag. Om inget av det fungerar så kanske GetModuleFileNameEx funkar... Tackar! Det fungerar nu i alla fall men frågan är hur "bra" gjort det är. Bör det göras på något lättare sätt kanske? Här är bifogad kod i vilket fall: argv är vad jag kan minnas systemspecifik huruvida man ger hela sökvägen, bara filnamnet, eventuella länkar etc., och är även fri att lämnas tom (det är jag säker på) om man inte kan ge ett namn. Alltså en generellt osäker metod. Ska programmet bara användas på windowsdatorer så funkar GetModuleFileName.Ta reda på filens 'path'
Anledningen till att jag behöver 'pathen' är för att mina fopen() har krånglat när jag skriver in filnamnen utan någon path, d.v.s. att filen skall hamna i samma folder som programmet.
M.v.H FredrikSv: Ta reda på filens 'path'
Sv:Ta reda på filens 'path'
Sv: Ta reda på filens 'path'
Sv:Ta reda på filens 'path'
GetModuleFileName( NULL, szFilePath, sizeof(szFilePath) );
std::string sFilePath;
sFilePath = szFilePath;
int nRet = sFilePath.find_last_of('\\');
szFilePath[nRet+1] = '\0';
Sv: Ta reda på filens 'path'
För det första bör du egentligen inte ta reda på pathen, utan alltid spara filer med sitt namn, då ska de hamna rätt; det som krävs är att du har rätt working directory. Om inte så bör lösningen vara att använda "Application data" på Windows.
Oavsett, lösningen är lite märklig. Du vill väl alltid använda std::string snarare än fula char * ?
Då kan du köra med något i stil medGetModuleFileName( NULL, FilePathTemp, sizeof(FilePathTemp) );
std::string FilePath = std::string(FilePathTemp).substr(std::string(FilePathTemp).find_last_of('\\'));
Eventuellt någon uppsnyggning med en temporär variabel.
Sen råder jag dig att skippa ungersk notation. Utdaterat, fult och utan nytta.