[C++]C++中的文件路径表示

本文详细解释了文件路径的两种表示方法:绝对路径和相对路径,并提供了C++代码示例来展示如何在Windows环境下获取和设置当前工作目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自http://blog.youkuaiyun.com/zdhlwt2008/article/details/46791407

文件路径的表示可以分为绝对路径和相对路径:
  绝对路径表示相对容易,例如
  //pDummyFile = fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb"); 给出了从盘符开始的全部路径,这里需要注意的是“\”要用双斜线"\\"
  vc工程默认访问的目录是工程目录,相对路径有以下多种形式,:
  //pDummyFile = fopen("dummy.bmp", "rb"); bmp文件就在vc工程目录下,和dsw文件同属一个目录。
  //pDummyFile = fopen("\\texture\\dummy.bmp", "rb"); 表示bmp文件在工程目录的同级目录texture中,因此路径是先退出工程目录再进入texture目录访问到bmp文件。“”表示退到当前目录的上一级目录(父目录)
  //pDummyFile = fopen(".\\texture\\dummy.bmp", "rb"); 表示bmp文件就在工程目录的子目录texture中,“。”表示当前默认目录,即vc工程目录,然后在进入其子目录texture访问到文件
  注意,对相对路径而言,路径表示中的“\”也要用双斜线"\\"

#include <iostream>   
#include <windows.h>   
#include <string>   
using namespace std;  
int main()  
{  
    char buf[1000];  
    int i=1000;  
    GetCurrentDirectory(1000,buf);  //得到当前工作路径  
    cout<<buf<<endl;  
  
    string a;  
    a.assign(buf);  
    cout<<a<<endl;  
    //这里加入的路径必须是正确的路径,如果加入错误的路径,如大小写   
    //和目录名不一样,还有空格,名字不相同等,都会导致SetCurentDirectory  
    //设置路径不成功,从而导致GetCurrentDirectory获取不到正确的路径,这样  
    //GetCurrentDirectory获取的路径就是当前路径或者是上一次SetCurrentDirectory  
    //设置成功的那个路径,GetCurrentDirectory获取一般是不会出错的。  
      
    /**在这里添加路径的时候,每一次都用到两个\,这样做的原因是为了防止文件 
    的目录名中出现转义字符,比如如果目录名字是以t开头的,则\t意义 
    就是制表符,而不是目录名。并且惊奇的发现,在这里使用两个/可以达到相同 
    的效果,不知道是什么原因,很可能是因为在操作系统内部就是这样做的,因为 
    在cmd dos命令行下,路径都是以/分割的,而在文件目录名显示的时候则是以\分 
    割的,而且在dos命令行下切换目录的时候这两种也都可以!甚至是两者混写都可以. 
    为了规范都写成\\***/  
  
    //设置为当前工作路径为当时的上一级   
    //a.append("//..//");   
    //a=a+"..//";   
    a.append("\\..\\");  
    //随意设置路径,只要是正确的,否则会导致SetCurrentDirectory执行错误  
    //a.append("//..//..//Service_Windows//Servic_Windows");  
    //a.append("\\..\\Service_Windows\\Service_Windows");  
    a.append("\\..\\Service_Windows//Service_Windows");  
  
    int test = SetCurrentDirectory(a.c_str());  //设置当前路径值  
    if (test == 0 )  
    {  
        cout << "execute failed\n";  
    }  
    GetCurrentDirectory(1000,buf);  
    //这里用两个反斜杠是必须得,因为这不通过操作系统来进行目录切换,   
    //只是简单的字符串拼接   
    strcat(buf,"\\Srvice_Windows\\Srvice_Windows");  
    cout << buf << endl;  
      
    a.assign(buf);  
    test = SetCurrentDirectory(a.c_str());  
    if (test == 0 )  
    {  
        cout << "execute failed\n";  
    }  
    GetCurrentDirectory(1000,buf);  
    cout<<buf<<endl;  
  
    return 0;  
}  

    相对路径需要重点说一下,很多时候包含头文件会在这个地方产生迷惑。首先相对路径是指相对某个文件而言,可以理解为目标文件相对当前文件的路径。windows下表示相对路径的规则为:
    1、.\ 或 ./  表示当前目录,或同级目录;
    2、..\ 或 ../  表示父目录,或上级目录。
    在VC环境中,我测试的结果是正斜杠和反斜杠为相同效果,因此应该都可以用。
    如果在代码中用#include语句,相对路径是相对于包含该语句的代码文件,或所有包含这个头文件的文件而言;如果在附加路径中设置相对路径,是相对于当前.vcproj工程文件而言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值