用c ++打开目录

时间:2017-03-05 23:33:20

标签: c++ stream directory move

我正在尝试编写一个程序,将文件从一个目录移动到另一个目录,到目前为止,我已经写了这个。

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库,所以我想知道是否有类似或更好的方法来做那些事情。

1 个答案:

答案 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