我遇到了一个客户使用相当长的路径和一些相对路径的问题。
实际上,当前目录小于_MAX_PATH,文件的相对路径小于_MAX_PATH,并且从相对路径派生的绝对路径小于_MAX_PATH。
但是与相对路径连接的当前目录大于_MAX_PATH,因此调用失败并返回0.
有没有人知道解决这个问题的方法?我们是否需要编写自己的相对绝对路径算法,这种算法并不是很天真?
以下是一些示例代码:
#include <stdlib.h>
#include <stdio.h>
#include <direct.h>
#include <cstring>
int main()
{
const char base_dir[] = "C:\\directory_location_1\\directory_location_2\\directory_location_3\\directory_location_4\\directory_location_5\\directory_location_6\\directory_location_7\\directory_location_8\\";
const char rel_path[] = "..\\..\\..\\..\\..\\directory_location4\\directory_location5\\directory_location6\\directory_location7\\test.txt";
_chdir(base_dir);
char abs_path[1024] = "";
_fullpath(abs_path, rel_path, 1024);
printf("base_dir length: %d\n", strlen(base_dir));
printf("rel_path length: %d\n", strlen(rel_path));
printf("base_dir + rel_path length: %d\n", strlen(base_dir) + strlen(rel_path));
printf("abs_path length: %d\n", strlen(abs_path));
printf("Path: %s", abs_path);
return 0;
}
给出了输出:
base_dir length: 171
rel_path length: 103
base_dir + rel_path length: 274
abs_path length: 0
Path:
需要注意的是,我甚至无法从directory_location_8执行cd ..\\..\\..\\..\\..\\directory_location4\\directory_location5\\directory_location6\\directory_location7\\
(它说&#34;文件名或扩展名太长了。&#34;),所以这看起来很低级别在Windows API中。
任何人都有可靠的相对路径 - &gt; Windows的绝对路径算法?