【问题标题】:Importing a list of files in a subdirectory into an array将子目录中的文件列表导入数组
【发布时间】:2015-02-28 23:40:48
【问题描述】:

我正在开发一个程序,该程序需要我在多个点将我的 C++ 项目的子目录的内容导入vector<string>。假设项目目录名为root\,我要扫描的目录是root\userFiles。此文件夹仅包含其他文件,没有其他子文件夹。

但是诀窍是我受到限制,我不能使用任何 boost、dirent.h 头文件。只是基本的。

我能想出的一个解决方案是使用命令system( "dir /b * > userFiles/fileList.txt" );,然后通过读取该文件并将其导入向量来过滤结果。

我的问题是我如何“cd”到那个文件夹,在那个文件夹中运行那个命令,然后退出到根文件夹..

我已经尝试使用system("chdir userFiles/")command,但我仍然可以获取根文件夹中的所有文件。

任何帮助将不胜感激。

【问题讨论】:

  • 如果您使用chdir(或_chdir,它可能在Windows下)首先移动到另一个目录,然后运行system,它会按您的预期工作。否则,有很多问题很好的答案描述了您如何在此处实际获取目录的文件名。
  • 正如我在问题中指定的那样。 chdir 似乎不起作用。我得到了整个根文件夹中所有文件的列表。至于答案,大多数都要求我使用某种我无法使用的第三方头文件。
  • 我假设您使用的是“windows”,在这种情况下您应该可以使用<windows.h> 对吗?如果你不能使用windows.h,那么我会使用 fstream 来构建一个包含"cd directory-you-want\ndir /b" 的批处理文件。
  • 我不能用windows.h哈哈。幸运的是,我已经找到了一种在同一个系统命令中运行所有这些命令的方法。 chdir userFiles && dir /b * > fileList.txt && chdir ../。奇迹般有效。非常感谢您的帮助:)

标签: c++ filesystems


【解决方案1】:

所以我想出了一个更简单的方法。

int main()
{
system("chdir userFiles && dir /b * > fileList.txt");
}

我正在使用&& 运算符将多个命令字符串连接在一起。因为我只使用system() 函数,一旦所有这些命令都属于同一进程。

【讨论】:

  • 没有意义 chdir ... - “新”目录仅在 shell 进程仍处于活动状态时才处于活动状态,因此当您的命令完成时,父进程仍将拥有其当前工作目录,其中它曾经是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
相关资源
最近更新 更多