【问题标题】:C++ rename function not working with absolute pathC ++重命名函数不适用于绝对路径
【发布时间】:2013-11-15 17:33:18
【问题描述】:

我的部分程序需要从用户那里获取文件路径,然后移动并重命名该文件。

如果我使用这样的相对路径:

#include <stdio.h>

int main() {
    int check;
    char oldname[] = "images//test_1.jpg";
    char newname[] = "images//test//test_2.jpg";
    check = rename(oldname, newname);
    if (check == 0)
        puts("Success");
    else
        perror("Failed");
    return 0;
}

效果很好。

但如果我尝试像这样使用绝对路径:

char oldname[] = "c://path//images//test_1.jpg";
char nername[] = "c://path//images//test//test_2.jpg";

它失败并显示“失败:没有这样的文件或目录”

我确信这是一个愚蠢的错误,但无论我仔细检查我的文件路径和代码多少次,我都无法弄清楚。任何建议将不胜感激。

哦,如果这有什么不同的话,我正在使用 linux。

【问题讨论】:

  • linux没有C:\,你不需要使用双斜杠只使用双反斜杠
  • 我实际上是通过我使用 PuTTY 登录的 linux 服务器进行编译,驱动器是 'H:\' 我的代码示例中的文件路径仅作为示例而不是实际路径。另外,我实际上在我的代码中错误地使用了'//',但将其更改为'\\'没有任何区别。
  • 确保image/test 存在。
  • 等等 - 你在 linux 机器上编译然后在哪里运行它?如果您在服务器上运行,H: 驱动器是否存在于您的 Windows 机器上并不重要。尝试从测试路径中删除 c: 看看它是否有效
  • 在linux下编译运行。但我的工作站实际上是 Windows,我远程登录到 linux 服务器(它可以访问我的 H:/ 驱动器中的文件)。另外,我仔细检查了图像/测试,它确实存在。我尝试删除 c:(实际上是 H:,但你明白了)但没有任何改变。

标签: c++ rename absolute-path


【解决方案1】:

如果是在linux服务器上运行,需要使用linux服务器上的路径。您可以使用pwd 打印工作目录(这将为您提供当前所在的绝对路径)。您也可以使用带有.. 的相对路径来上一级目录。比如你的目录结构可能是这样的

code/
    main.cpp
    main.h
    a.out

images/
    yourimage.png

所以你可以这样做:

$ pwd
/home/user/code

然后您的图像的绝对路径将是

/home/user/images/yourimage.png

或者您可以使用代码目录中的相对路径

../images/yourimage.png

【讨论】:

  • 谢谢,这正是我所需要的。显然我并不完全理解这个服务器是如何工作的。在我的机器上,驱动器被列为 H:/ 但在 Linux 上的“驱动器”中,我输入了 pwd 并获得了路径 /home/user/etc... 无论如何,我在程序中修复了路径并让它工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-10-05
  • 2011-06-08
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
相关资源
最近更新 更多