_fullpath()与长相对路径无法正常工作

时间:2016-02-25 20:02:41

标签: c++ windows visual-studio visual-c++

我遇到了一个客户使用相当长的路径和一些相对路径的问题。

实际上,当前目录小于_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的绝对路径算法?

0 个答案:

没有答案