用于复制文件的 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
就足够了。
我写了一个简单的程序来复制文件。 它有两个字符串:
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
就足够了。