用于复制文件的c++代码::对相对地址感到困惑(波浪)
C++ code for copying FILES : : confused about relative address (tilde)
我写了一个简单的程序来复制文件。它得到两个字符串:
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
就足够了。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- 用于复制文件的c++代码::对相对地址感到困惑(波浪)