在本教程中,将学习如何使用PocoC++库中的DirectoryIterator
类来遍历目录中的所有项目,并使用DateTimeFormatter
类来格式化文件的最后修改时间戳,而不是使用默认的UTC时间。这个工具模仿了Unix命令行中的ls -all
命令的行为。
首先,需要创建一个名为rec_dir.cc
的文件,并在其中编写以下代码:
C++代码:
#include <Poco/DirectoryIterator.h>
#include <Poco/DateTimeFormatter.h>
#include <Poco/LocalDateTime.h>
#include <iostream>
#include <string>
using namespace Poco;
using namespace std;
void rec_dir(const string & path) {
DirectoryIterator end;
for (DirectoryIterator it(path); it != end; ++it) {
cout << (it->isDirectory() ? "d" : "-");
cout << (it->canRead() ? "r" : "-");
cout << (it->canWrite() ? "w" : "-");
cout << (it->canExecute() ? "x" : "-");
cout << "\t";
cout << it->getSize() << "\t";
LocalDateTime lastModified(it->getLastModified());
cout << DateTimeFormatter::format(lastModified, "%Y-%m-%d %H:%M") << "\t";
cout << it->path() << (it->isDirectory() ? "/" : it->canExecute() ? "*" : "") << endl;
if (it->isDirectory()) {
rec_dir(it->path());
}
}
}
int main(int argc, char **argv) {
rec_dir(argc > 1 ? argv[1] : ".");
return 0;
}
编译并运行:
$ g++ -o rec_dir rec_dir.cc -lPocoFoundation
$ ./rec_dir
输出结果示例:
-rwx 14223 2011-09-14 13:34 rec_dir*
drwx 4096 2011-09-14 12:52 testdir/
drwx 4096 2011-09-14 12:52 testdir/dir/
-rw- 941 2011-09-14 13:24 rec_dir.cc
-rw- 0 2011-09-14 12:43 somefile