Forum » Programiranje » [VC++] Uporaba INI fajla v isti mapi kot exe ?
[VC++] Uporaba INI fajla v isti mapi kot exe ?
MrStein ::
Živjo!
Kako je najbolje uporabit INI fajl, ki se naj nahaja v isti mapi* kot exe fajl ?
Trenutno sem uprabil nekaj kot :
GetPrivateProfileString(_T("sekcija"),_T("vnos"),_T("defvalue"),buf, sizeof buf ,_T(".\\mojprog.ini"));
Moti me to, MSDN piše, da to šče v WINDOWS mapi, razen če podam absolutno pot.
Jaz pa sem podal relativno pot, pa vseeno ne išče v WINDOWS.
A bo to delalo tako na vse Windows ?
Sem probal tudi metode ala CWinApp::GetProfileString, samo tisto ne najde lokalnega ini fajla. Probal sem :
theApp.m_pszProfileName=_tcsdup(_T(".\\mojprog.ini"));
pa ne "prime".
Hvala!
David
Kako je najbolje uporabit INI fajl, ki se naj nahaja v isti mapi* kot exe fajl ?
Trenutno sem uprabil nekaj kot :
GetPrivateProfileString(_T("sekcija"),_T("vnos"),_T("defvalue"),buf, sizeof buf ,_T(".\\mojprog.ini"));
Moti me to, MSDN piše, da to šče v WINDOWS mapi, razen če podam absolutno pot.
Jaz pa sem podal relativno pot, pa vseeno ne išče v WINDOWS.
A bo to delalo tako na vse Windows ?
Sem probal tudi metode ala CWinApp::GetProfileString, samo tisto ne najde lokalnega ini fajla. Probal sem :
theApp.m_pszProfileName=_tcsdup(_T(".\\mojprog.ini"));
pa ne "prime".
Hvala!
David
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Senitel ::
Kaj pa če mu podaš absolutno pot (jo dobiš v main oziroma WinMain)?
Zgodovina sprememb…
- spremenil: Senitel ()
MrStein ::
Ja, smo tak rešili. Z GetCurrentDirectory.
A je metoda z WinMain boljša ?
A je metoda z WinMain boljša ?
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
krho ::
Da, Current dir lahko kaže nekam čisto drugam...
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net
MrStein ::
Aha, kak točno dobim potem pot iz WinMain ?
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Person ::
Lahko jo dobiš s pomočjo te funkcije:
GetModuleFileName Function
http://msdn.microsoft.com/en-us/library...
Pač ta funkcija ti lahko vrne celotno pot do tvojega exe fajla ... pač moraš zadnji del "\*.exe" odstranit.
Pač s pomočjo funkcije, ki poišče, kje se zadnji "\" nahajaja v vrnjenem stringu ...
PS: V C# pa mislim da obstaja še lažji način, pač da direktno dobiš pot brez dodatnega imena tvoje exe datoteke.
LP A
GetModuleFileName Function
http://msdn.microsoft.com/en-us/library...
Pač ta funkcija ti lahko vrne celotno pot do tvojega exe fajla ... pač moraš zadnji del "\*.exe" odstranit.
Pač s pomočjo funkcije, ki poišče, kje se zadnji "\" nahajaja v vrnjenem stringu ...
PS: V C# pa mislim da obstaja še lažji način, pač da direktno dobiš pot brez dodatnega imena tvoje exe datoteke.
LP A
Let's make something useful!
Senitel ::
Tretji parameter v WinMain je v bistvu string s potko do exe.
Zgodovina sprememb…
- spremenil: Senitel ()
MrStein ::
Pač s pomočjo funkcije, ki poišče, kje se zadnji "\" nahajaja v vrnjenem stringu ...
Misliš "dirname()" ?
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Person ::
Tole sem jaz včasih uporabljal:
void GetAppDirectory( TCHAR* szAppDirectory )
{
TCHAR szAppPath[MAX_PATH] = _T("");
GetModuleFileName(0, szAppPath, sizeof(szAppPath) - 1);
_tcsncpy(szAppDirectory, szAppPath, _tcsrchr(szAppPath, '\\') - szAppPath);
szAppDirectory[_tcslen(szAppDirectory)] = '\0';
return;
}
Verjetno se da kaj optimizirati ... (pač da namesto szAppDirectory uporabiš kar szAppPath in tako delaš samo z eno spremenljivko).
Pa verjetno je vrstica s kodo szAppDirectory[_tcslen(szAppDirectory)] = '\0'; čisto nepotrebna. No pa sej boš znal.
@Senitel:
Hm, a pa je vedno tisti string v WinMain absolutna pot?
Po moje, če iz ukazne vrstice poženeš recimo: program.exe -neko_stikalo
ti po moje točno to vrne ...
void GetAppDirectory( TCHAR* szAppDirectory )
{
TCHAR szAppPath[MAX_PATH] = _T("");
GetModuleFileName(0, szAppPath, sizeof(szAppPath) - 1);
_tcsncpy(szAppDirectory, szAppPath, _tcsrchr(szAppPath, '\\') - szAppPath);
szAppDirectory[_tcslen(szAppDirectory)] = '\0';
return;
}
Verjetno se da kaj optimizirati ... (pač da namesto szAppDirectory uporabiš kar szAppPath in tako delaš samo z eno spremenljivko).
Pa verjetno je vrstica s kodo szAppDirectory[_tcslen(szAppDirectory)] = '\0'; čisto nepotrebna. No pa sej boš znal.
@Senitel:
Hm, a pa je vedno tisti string v WinMain absolutna pot?
Po moje, če iz ukazne vrstice poženeš recimo: program.exe -neko_stikalo
ti po moje točno to vrne ...
Let's make something useful!
Senitel ::
V bistvu ja, Person ima prav (moral preverit). Argument cmdline bo samo "-neko_stikalo", celo brez samega programa.
Tako da dejansko bo treba naredit tako kot je postal Person. GetCommandLine, ki je bila moja druga varianta ima isti problem kot GetCurrentDirectory.
Tako da dejansko bo treba naredit tako kot je postal Person. GetCommandLine, ki je bila moja druga varianta ima isti problem kot GetCurrentDirectory.
MrStein ::
Mimogrede: A ekvivalent dirname() sploh ne obstaja na Win ?
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Person ::
V C# obstaja tole: Application.StartupPath + "\\settings.ini"
Za C++ pa kolikor jaz poznam edino na zgoraj opisan način.
LP
Za C++ pa kolikor jaz poznam edino na zgoraj opisan način.
LP
Let's make something useful!
Person ::
Torej takole nekako bi naj C++ ekvivalent izgledal ;)
//-----------------------------------------------------------------------------
// Datoteka: GetAppStartupPath.cpp
//
// Opis: Get application startup path
//
// Copyright (c) 1999-2008 pDEV. All rights reserved!
//-----------------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <tchar.h>
#include <windows.h>
void GetAppStartupPath( TCHAR *szAppStartupPath )
{
TCHAR szModuleFileName[MAX_PATH] = _T("");
GetModuleFileName(0, szModuleFileName, MAX_PATH - 1);
_tcsncpy(szAppStartupPath, szModuleFileName, _tcsrchr(szModuleFileName, '\\') - szModuleFileName + 1);
}
int _tmain(int argc, TCHAR *argv[], TCHAR*envp[])
{
TCHAR szAppStartupPath[MAX_PATH] = _T("");
GetAppStartupPath(szAppStartupPath);
MessageBox(0, szAppStartupPath, "GetAppStartupPath DEMO", MB_OK);
}
PS: Podarim kodo ostalim ;)
//-----------------------------------------------------------------------------
// Datoteka: GetAppStartupPath.cpp
//
// Opis: Get application startup path
//
// Copyright (c) 1999-2008 pDEV. All rights reserved!
//-----------------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include <tchar.h>
#include <windows.h>
void GetAppStartupPath( TCHAR *szAppStartupPath )
{
TCHAR szModuleFileName[MAX_PATH] = _T("");
GetModuleFileName(0, szModuleFileName, MAX_PATH - 1);
_tcsncpy(szAppStartupPath, szModuleFileName, _tcsrchr(szModuleFileName, '\\') - szModuleFileName + 1);
}
int _tmain(int argc, TCHAR *argv[], TCHAR*envp[])
{
TCHAR szAppStartupPath[MAX_PATH] = _T("");
GetAppStartupPath(szAppStartupPath);
MessageBox(0, szAppStartupPath, "GetAppStartupPath DEMO", MB_OK);
}
PS: Podarim kodo ostalim ;)
Let's make something useful!
Zgodovina sprememb…
- spremenil: Person ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Windows 10 z reklamami tudi v Raziskovalcu (strani: 1 2 3 )Oddelek: Novice / Operacijski sistemi | 40260 (33824) | D3m |
» | C# in servisiOddelek: Programiranje | 1095 (655) | mihies |
» | Apache - localhost JA, IP naslov NEOddelek: Omrežja in internet | 6605 (6464) | ManDriver |
» | [VC++] Napaka pri prevajanjuOddelek: Programiranje | 1683 (1424) | Jean-Paul |
» | [C/C++] Branje sektorjevOddelek: Programiranje | 1281 (1129) | yeti |