mirror of
https://github.com/boostorg/filesystem.git
synced 2025-05-11 21:24:12 +00:00
Boost.Filesystem v4 will contain breaking changes from v3 that are required for better compatibility with C++17 std::filesystem. It will also remove the deprecated features of v3. Updated docs to reflect the differences between v3 and v4. Updated tests to verify both v3 and v4 where the differences are present.
91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
// simple_ls program -------------------------------------------------------//
|
|
|
|
// Copyright Jeff Garland and Beman Dawes, 2002
|
|
|
|
// Use, modification, and distribution is subject to the Boost Software
|
|
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
// See http://www.boost.org/libs/filesystem for documentation.
|
|
|
|
// As an example program, we don't want to use any deprecated features
|
|
#ifndef BOOST_FILESYSTEM_NO_DEPRECATED
|
|
#define BOOST_FILESYSTEM_NO_DEPRECATED
|
|
#endif
|
|
#ifndef BOOST_SYSTEM_NO_DEPRECATED
|
|
#define BOOST_SYSTEM_NO_DEPRECATED
|
|
#endif
|
|
|
|
#include <boost/filesystem/operations.hpp>
|
|
#include <boost/filesystem/directory.hpp>
|
|
#include <boost/filesystem/path.hpp>
|
|
#include <iostream>
|
|
|
|
namespace fs = boost::filesystem;
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
fs::path p(fs::current_path());
|
|
|
|
if (argc > 1)
|
|
p = fs::system_complete(argv[1]);
|
|
else
|
|
std::cout << "\nusage: simple_ls [path]" << std::endl;
|
|
|
|
unsigned long file_count = 0;
|
|
unsigned long dir_count = 0;
|
|
unsigned long other_count = 0;
|
|
unsigned long err_count = 0;
|
|
|
|
if (!fs::exists(p))
|
|
{
|
|
std::cout << "\nNot found: " << p << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
if (fs::is_directory(p))
|
|
{
|
|
std::cout << "\nIn directory: " << p << "\n\n";
|
|
fs::directory_iterator end_iter;
|
|
for (fs::directory_iterator dir_itr(p);
|
|
dir_itr != end_iter;
|
|
++dir_itr)
|
|
{
|
|
try
|
|
{
|
|
if (fs::is_directory(dir_itr->status()))
|
|
{
|
|
++dir_count;
|
|
std::cout << dir_itr->path().filename() << " [directory]\n";
|
|
}
|
|
else if (fs::is_regular_file(dir_itr->status()))
|
|
{
|
|
++file_count;
|
|
std::cout << dir_itr->path().filename() << "\n";
|
|
}
|
|
else
|
|
{
|
|
++other_count;
|
|
std::cout << dir_itr->path().filename() << " [other]\n";
|
|
}
|
|
}
|
|
catch (const std::exception& ex)
|
|
{
|
|
++err_count;
|
|
std::cout << dir_itr->path().filename() << " " << ex.what() << std::endl;
|
|
}
|
|
}
|
|
std::cout << "\n"
|
|
<< file_count << " files\n"
|
|
<< dir_count << " directories\n"
|
|
<< other_count << " others\n"
|
|
<< err_count << " errors\n";
|
|
}
|
|
else // must be a file
|
|
{
|
|
std::cout << "\nFound: " << p << "\n";
|
|
}
|
|
|
|
return 0;
|
|
}
|