2

我写了一个简单的程序来复制文件。它有两个字符串:

1) 用于源文件的路径。

2) 用于复制文件的名称。

当我给它绝对或相对路径(没有波浪号(〜))时,它可以正常工作。

但是当我给它一个带有波浪号(〜)的相对路径时,它找不到文件的地址。这让我很困惑!

这是我的示例输入:

1) /Users/mahan/Desktop/Copy.cpp

2) ~/Desktop/Copy.cpp

第一个工作正常,但第二个没有。

这是我的代码:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    string path, copy_name;
    cin >> path >> copy_name;
    ifstream my_file;
    ofstream copy(copy_name);
    my_file.open(path);
    if(my_file.is_open())
    {
        copy << my_file.rdbuf();
        copy.close();
        my_file.close();
    }
}
4

3 回答 3

6

~由您用来自动展开到您的$HOME目录的shell 处理。

std::ofstream不处理~文件路径中的字符,因此只有您的第一个示例有效。


如果您从命令行使用 将文件路径传递给您的程序argv[1],并从您的 shell 中调用它,您将获得~自动扩展的。


综上所述,如果您想自己扩展~字符,您可以使用该std::getenv()函数确定 的值$HOME,并将其替换为该值。

于 2015-05-23T14:40:08.970 回答
0

第二个示例不起作用,因为 shell 替换~$HOME,即您的主目录的路径。

fstreamobjects 不会执行此替换,而是会查找实际名为 的目录~,该目录可能在您的工作目录中不存在。

于 2015-05-23T14:42:17.730 回答
0

std::ofstream处理不了~。它是您home目录的快捷方式。您需要提供主目录的绝对路径或相对于代码运行目录的相对路径才能使其工作。

给出相对路径,例如,如果你在Desktop目录中运行你的代码,那么你不需要给出~/Desktop/Copy.cpp. 只要付出Copy.cpp就足够了。

于 2015-05-23T14:43:00.090 回答