使用C++获取文件路径,已获取当前路径为基础


[cpp]  view plain copy
  1.  今天搞清楚了如果使用C++获取当前路径,并且已获取当前路径为基础,测试代码如下,如果有注释错误还请看到的高手指正,呵呵~~  
[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <windows.h>  
  3. #include <string>  
  4. using namespace std;  
  5. int main()  
  6. {  
  7.     char buf[1000];  
  8.     int i=1000;  
  9.     GetCurrentDirectory(1000,buf);  //得到当前工作路径  
  10.     cout<<buf<<endl;  
  11.   
  12.     string a;  
  13.     a.assign(buf);  
  14.     cout<<a<<endl;  
  15.     //这里加入的路径必须是正确的路径,如果加入错误的路径,如大小写  
  16.     //和目录名不一样,还有空格,名字不相同等,都会导致SetCurentDirectory  
  17.     //设置路径不成功,从而导致GetCurrentDirectory获取不到正确的路径,这样  
  18.     //GetCurrentDirectory获取的路径就是当前路径或者是上一次SetCurrentDirectory  
  19.     //设置成功的那个路径,GetCurrentDirectory获取一般是不会出错的。  
  20.       
  21.     /**在这里添加路径的时候,每一次都用到两个\,这样做的原因是为了防止文件 
  22.     的目录名中出现转义字符,比如如果目录名字是以t开头的,则\t意义 
  23.     就是制表符,而不是目录名。并且惊奇的发现,在这里使用两个/可以达到相同 
  24.     的效果,不知道是什么原因,很可能是因为在操作系统内部就是这样做的,因为 
  25.     在cmd dos命令行下,路径都是以/分割的,而在文件目录名显示的时候则是以\分 
  26.     割的,而且在dos命令行下切换目录的时候这两种也都可以!甚至是两者混写都可以. 
  27.     为了规范都写成\\***/  
  28.   
  29.     //设置为当前工作路径为当时的上一级  
  30.     //a.append("//..//");  
  31.     //a=a+"..//";  
  32.     a.append("\\..\\");  
  33.     //随意设置路径,只要是正确的,否则会导致SetCurrentDirectory执行错误  
  34.     //a.append("//..//..//Service_Windows//Servic_Windows");  
  35.     //a.append("\\..\\Service_Windows\\Service_Windows");  
  36.     a.append("\\..\\Service_Windows//Service_Windows");  
  37.   
  38.     int test = SetCurrentDirectory(a.c_str());  //设置当前路径值  
  39.     if (test == 0 )  
  40.     {  
  41.         cout << "execute failed\n";  
  42.     }  
  43.     GetCurrentDirectory(1000,buf);  
  44.     //这里用两个反斜杠是必须得,因为这不通过操作系统来进行目录切换,  
  45.     //只是简单的字符串拼接  
  46.     strcat(buf,"\\Srvice_Windows\\Srvice_Windows");  
  47.     cout << buf << endl;  
  48.       
  49.     a.assign(buf);  
  50.     test = SetCurrentDirectory(a.c_str());  
  51.     if (test == 0 )  
  52.     {  
  53.         cout << "execute failed\n";  
  54.     }  
  55.     GetCurrentDirectory(1000,buf);  
  56.     cout<<buf<<endl;  
  57.   
  58.     return 0;  
  59. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值