用于复制文件的c++代码::对相对地址感到困惑(波浪)

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

本文关键字:波浪 文件 复制 c++ 用于 代码 相对地址      更新时间:2023-10-16

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

1)表示源文件的路径。

2)表示复制文件的名称。

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

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

下面是我的示例输入:

1)/用户/马汉/桌面/Copy.cpp

2) ~/桌面/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目录的快捷方式。您需要给出home的绝对路径或相对于代码运行目录的相对路径,以便它工作。

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