c/c++ 中路径

文件路径的表示

可以分为绝对路径和相对路径:


绝对路径表示相对容易,例如:

pDummyFile = fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb");


相对路径有以下多种形式:

1、当前默认目录下:

pDummyFile = fopen("dummy.bmp", "rb");

VS2012中默认目录为exe所在目录。例如,把exe放在“abc”文件夹下,如果需要调用dll,只需要把dll与exe放在同一个目录,LoadLibrary的路径直接输入dll名即可。


2、访问上一级目录(父目录)用“..”:

pDummyFile = fopen("..\\texture\\dummy.bmp", "rb");

3、访问下一级目录(子目录)用“.”:

pDummyFile = fopen(".\\texture\\dummy.bmp", "rb");


获取当前目录


1、标准C++的方法。获取当前工作目录是使用函数:getcwd。cwd指的是“current working directory”。


函数说明:
    函数原型:char* getcwd(char* buffer, int len);
    参数:buffer是指将当前工作目录的绝对路径copy到buffer所指的内存空间, len是buffer的长度。
    返回值:获取成功则返回当前工作目录(绝对路径),失败则返回false(即NULL)。 
    该函数所属头文件为<direct.h>

范例1:

#include <stdio.h>  
#include <direct.h>  
  
int main()  
{  
    char *buffer;  
    //也可以将buffer作为输出参数  
    if((buffer = getcwd(NULL, 0)) == NULL)  
    {  
        perror("getcwd error");  
    }  
    else  
    {  
        printf("%s\n", buffer);  
        free(buffer);  
    }  
}  

注:VC中要使用_getcwd

范例2:

#include<stdio.h>
#include<direct.h>
#include<stdlib.h>
intmain(intargc,char*argv[])
{
charpath[_MAX_PATH];
_getcwd(path,_MAX_PATH);
printf("当前工作目录:\n%s\n",path);
if((_chdir("d:\\visualc++"))==0)
{
printf("修改工作路径成功\n");
_getcwd(path,_MAX_PATH);
printf("当前工作目录:\n%s\n",path);
}
else
{
perror("修改工作路径失败");
exit(1);
}
return0;
}


2、MS的方法。GetCurrentDirectory和GetModuleFileName。

DWORD GetCurrentDirectory(

  DWORD nBufferLength,  // size, in characters, of directory buffer
  LPTSTR lpBuffer       // pointer to buffer for current directory
);

HMODULE module = GetModuleHandle(0); 

CHAR buf[MAX_PATH]; 
GetModuleFileName(module, buf, sizeof buf); 

不过以上两种目录路径碰到文件夹带有“.”就完蛋了,如当前程序放在 D:\\myproject\\test-1.0\\win-app\\目录下,要想通过GetCurrentDiretory或GetModuleFileName来获取当前目录(想要得到:D:\\myproject\\test-1.0\\win-app), 永远不正确,每次都是:D:\\myproject\\test-1.0 目录。此时,就只能使用_getcwd了。


你可能感兴趣的:(C++)