文件路径的表示可以分为绝对路径和相对路径:
绝对路径表示相对容易,例如
//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;
-
}