我试图编写一个程序打开并自动读取文件。 但问题是该文件存储在一个名称未知的文件夹中。 我只知道文件夹的位置和文件的名称。 如何在char *中获取该文件的path?
编辑:例如: d:files<random folder>data.txt
文本文件到纯数组中的string数组?
如何使用Windows命令行search文件,然后用位置创build文本文档?
在Windows中locking文件
linux:数据是否写入文件,保证其他进程可见?
pythonsubprocess覆盖文件用于标准输出 – 我需要它附加到文件(Windows)
文件在多个进程上
如何在不lockingperl的情况下locking日志文件
由于这是标记为windows ,您不妨使用Windows API函数:
用FindFirstFile()
FindNextFile()
枚举并遍历给定目录中的所有文件。
要检查目录,请查看WIN32_FIND_DATA结构中包含的WIN32_FIND_DATA (由调用Find...File()填充)。 但一定要跳过. 和..目录。 如果需要,可以递归地完成。
如果你使用的是MFC,你可以使用CFileFind (这是API函数的一个包装):
CFileFind finder; BOOL bWorking = finder.FindFile(_T("*.*")); while (bWorking) { bWorking = finder.FindNextFile(); TRACE(_T("%sn"),(LPCTSTR)finder.GetFileName()); }
为了好玩,我使用GCC 5支持的新的实验<filesystem> FS技术规范来实现它。
#include <iostream> #include <experimental/filesystem> // for readability namespace fs = std::experimental::filesystem; int main(int,char* argv[]) { if(!argv[1]) { std::cerr << "require 2 parameters,search directory and filenamen"; return EXIT_FAILURE; } fs::path search_dir = argv[1]; if(!fs::is_directory(search_dir)) { std::cerr << "First parameter must be a directory: " << search_dir << 'n'; return EXIT_FAILURE; } if(!argv[2]) { std::cerr << "Expected filename to search forn"; return EXIT_FAILURE; } // file to search for fs::path file_name = argv[2]; const fs::directory_iterator dir_end; // directory end sentinel // used to iterate through each subdirectory of search_dir fs::directory_iterator dir_iter(search_dir); for(; dir_iter != dir_end; ++dir_iter) { // skip non directories if(!fs::is_directory(dir_iter->path())) continue; // check directory for file // iterate through files in this subdirectory dir_iter->path() auto file_iter = fs::directory_iterator(dir_iter->path()); for(; file_iter != dir_end; ++file_iter) { // ignore directories and wrong filenames if(fs::is_directory(file_iter->path()) || file_iter->path().filename() != file_name) continue; // Ok we found it (the first one) std::cout << "path: " << file_iter->path().string() << 'n'; return EXIT_SUCCESS; } } // Not found std::cout << file_name << " was not found in " << search_dir.string() << 'n'; return EXIT_FAILURE; }
这个想法是:列出d:files下的目录并尝试打开每个目录中的文件。
目前还没有一种标准的C ++方式来获取所有现有的文件/目录。 一个简单而粗鲁的做法是
system("dir d:\files /b /ad > tmpfile");
这将列出所有目录( /ad ),重定向到一个临时文件。 然后打开文件:
std::ifstream list("tmpfile");
并阅读它:
std::string dirname; std::string filename; while (std::getline(list,dirname)) { filename = "d:\files\" + dirname + "\data.txt"; if ( ... file exists ... ) break; }
它会覆盖可能有用的文件
如果当前目录是只读的,它不起作用
它只会在Windows中工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。