我正在尝试编写一个程序,将文件从一个目录移动到另一个目录,到目前为止,我已经写了这个。
void file_Move(ifstream in,ofstream out)
{
string name, name2;
int downloads;
cout << "Enter 1 if the file you wish to move is in downloads" << endl;
cin >> downloads;
if (downloads == 1)
{
opendir("F:/Downloads"); //supposed to open the directory so that the user can input the file they wish to be moved.
closedir("F:/Downloads");
}
}
Visual Studio没有对opendir和closedir所必需的dirent.h库,所以我想知道是否有类似或更好的方法来做那些事情。
答案 0 :(得分:1)
你的代码现在没有多大意义。
一方面,file_move
采用ifstream和ofstream,这意味着您已经找到并打开了您关注的文件。然后它继续尝试搜索文件......
目前,我假设你需要搜索你关心的文件。在这种情况下,您可能希望使用filesystem
库。使用真正的最新编译器,这可能直接在std::
。对于稍微较旧的编译器,它可能位于std::experimental
中。对于较旧的(早于文件系统TS),您可能需要使用Boost Filesystem代替。
在任何情况下,使用它的代码都会运行如下:
#include <string>
#include <filesystem>
#include <iostream>
#include <iterator>
#include <algorithm>
void show_files(std::string const & path) {
// change to the std or Boost variant as needed.
namespace fs = std::experimental::filesystem::v1;
fs::path p{ path };
fs::directory_iterator b{ p }, e;
std::transform(b, e,
std::ostream_iterator<std::string>(std::cout, "\n"),
[](fs::path const &p) {
return p.string();
}
);
}
当然,如果你要复制文件,你可能想把文件名放在一个向量中(或者那个顺序上的东西),而不是只显示它们 - 但是你可能知道如何做你想做的事情一旦你有文件名可以使用。
在任何情况下,要调用它,您只需将路径传递到您关注的目录,例如F:/Downloads
:
show_files("f:/Downloads");
当然,在使用POSIX路径的系统下,您将传递不同的输入字符串(例如,可能类似于"/home/some_user/Downloads"
)。哦,至少在其通常的目录结构中,使用g ++,标题将是experimental/filesystem
,而不仅仅是filesystem
。