用于复制文件的 C++ 代码::对相对地址(代字号)感到困惑

C++ code for copying FILES : : confused about relative address (tilde)

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

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();
    }
}

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

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


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


上面说了,如果想自己扩展~字符,可以用std::getenv()函数确定$HOME的值,替换成该值。

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

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

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

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