The GetCurrentDirectory function retrieves the current directory for the current process. DWORD GetCurrentDirectory( DWORD nBufferLength, // size, in characters, of directory buffer LPTSTR lpBuffer // pointer to buffer for current directory );
DWORD GetModuleFileName( HMODULE hModule, // handle to module to find filename for LPTSTR lpFilename, // pointer to buffer to receive module path DWORD nSize // size of buffer, in characters );
Parameters hModule Handle to the module whose executable filename is being requested. If this parameter is NULL, GetModuleFileName returns the path for the file used to create the calling process. lpFilename Pointer to a buffer that is filled in with the path and filename of the given module. nSize Specifies the length, in characters, of the lpFilename buffer. If the length of the path and filename exceeds this limit, the string is truncated. //这个处理一下也可以
_splitpath, _wsplitpath Break a path name into components.void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );void _wsplitpath( const wchar_t *path, wchar_t *drive, wchar_t *dir, wchar_t *fname, wchar_t *ext );Routine Required Header Compatibility _splitpath <stdlib.h> Win 95, Win NT _wsplitpath <stdlib.h> or <wchar.h> Win 95, Win NT For additional compatibility information, see Compatibility in the Introduction.LibrariesLIBC.LIB Single thread static library, retail version LIBCMT.LIB Multithread static library, retail version MSVCRT.LIB Import library for MSVCRT.DLL, retail version Return ValueNoneParameterspathFull pathdriveOptional drive letter, followed by a colon (:)dirOptional directory path, including trailing slash. Forward slashes ( / ), backslashes ( \ ), or both may be used.fnameBase filename (no extension)extOptional filename extension, including leading period (.)ResThe _splitpath function breaks a path into its four components. _splitpath automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use. _wsplitpath is a wide-character version of _splitpath; the arguments to _wsplitpath are wide-character strings. These functions behave identically otherwise.Generic-Text Routine MappingsTCHAR.H Routine _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined _tsplitpath _splitpath _splitpath _wsplitpath Each argument is stored in a buffer; the manifest constants _MAX_DRIVE, _MAX_DIR, _MAX_FNAME, and _MAX_EXT (defined in STDLIB.H) specify the maximum size necessary for each buffer. The other arguments point to buffers used to store the path elements. After a call to _splitpath is executed, these arguments contain empty strings for components not found in path. You can pass a NULL pointer to _splitpath for any component you don’t need.Example/* MAKEPATH.C */#include <stdlib.h> #include <stdio.h>void main( void ) { char path_buffer[_MAX_PATH]; char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" ); printf( "Path created with _makepath: %s\n\n", path_buffer ); _splitpath( path_buffer, drive, dir, fname, ext ); printf( "Path extracted with _splitpath:\n" ); printf( " Drive: %s\n", drive ); printf( " Dir: %s\n", dir ); printf( " Filename: %s\n", fname ); printf( " Ext: %s\n", ext ); } OutputPath created with _makepath: c:\sample\crt\makepath.cPath extracted with _splitpath: Drive: c: Dir: \sample\crt\ Filename: makepath Ext: .c
DWORD nBufferLength, // size, in characters, of directory buffer
LPTSTR lpBuffer // pointer to buffer for current directory
);
HMODULE hModule, // handle to module to find filename for
LPTSTR lpFilename, // pointer to buffer to receive module path
DWORD nSize // size of buffer, in characters
);
Parameters
hModule
Handle to the module whose executable filename is being requested. If this parameter is NULL, GetModuleFileName returns the path for the file used to create the calling process.
lpFilename
Pointer to a buffer that is filled in with the path and filename of the given module.
nSize
Specifies the length, in characters, of the lpFilename buffer. If the length of the path and filename exceeds this limit, the string is truncated.
//这个处理一下也可以
GetModuleFileName就可以了,然后截取后面的路径就行了
char ch[256];
GetModuleFileName(hModule,ch,255);
for(int i=strlen(ch);i && ch[i]!='\\';i--);
ch[i]=0;C似易似难人难断
memset(szAppPath, 0, MAX_PATH);
GetModuleFileName(NULL, szAppPath, MAX_PATH);
CString str;
str.Format("%s", szAppPath);
str = str.Left(str.ReverseFind('\\') + 1);
以上只是一种方法,其它的自己再慢慢研究。
Break a path name into components.void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );void _wsplitpath( const wchar_t *path, wchar_t *drive, wchar_t *dir, wchar_t *fname, wchar_t *ext );Routine Required Header Compatibility
_splitpath <stdlib.h> Win 95, Win NT
_wsplitpath <stdlib.h> or <wchar.h> Win 95, Win NT
For additional compatibility information, see Compatibility in the Introduction.LibrariesLIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version
Return ValueNoneParameterspathFull pathdriveOptional drive letter, followed by a colon (:)dirOptional directory path, including trailing slash. Forward slashes ( / ), backslashes ( \ ), or both may be used.fnameBase filename (no extension)extOptional filename extension, including leading period (.)ResThe _splitpath function breaks a path into its four components. _splitpath automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use. _wsplitpath is a wide-character version of _splitpath; the arguments to _wsplitpath are wide-character strings. These functions behave identically otherwise.Generic-Text Routine MappingsTCHAR.H Routine _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined
_tsplitpath _splitpath _splitpath _wsplitpath
Each argument is stored in a buffer; the manifest constants _MAX_DRIVE, _MAX_DIR, _MAX_FNAME, and _MAX_EXT (defined in STDLIB.H) specify the maximum size necessary for each buffer. The other arguments point to buffers used to store the path elements. After a call to _splitpath is executed, these arguments contain empty strings for components not found in path. You can pass a NULL pointer to _splitpath for any component you don’t need.Example/* MAKEPATH.C */#include <stdlib.h>
#include <stdio.h>void main( void )
{
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT]; _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
printf( "Path created with _makepath: %s\n\n", path_buffer );
_splitpath( path_buffer, drive, dir, fname, ext );
printf( "Path extracted with _splitpath:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}
OutputPath created with _makepath: c:\sample\crt\makepath.cPath extracted with _splitpath:
Drive: c:
Dir: \sample\crt\
Filename: makepath
Ext: .c
GetModuleFileName(::GetModuleHandle(NULL),path,MAX_PATH);
strProgramPath = path; // 当前的路径名+你的程序名
strProgramPath.TrimRight(str);//str就是你的完整的程序名,例如A.exe,str = "A.exe"
delete [] path;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left(nPos);sPath即为去掉.exe的路径,想得到进一步的路径,方法同上