#include <iostream>
#include <filesystem>
#include <fstream>
#include <string>
namespace fs = std::filesystem;
int main() {
fs::path current = fs::current_path();
std::cout << "Current path: " << current << std::endl;
fs::path test_dir = current / "test_filesystem";
if (fs::exists(test_dir)) {
std::cout << "Directory already exists: " << test_dir << std::endl;
} else {
if (fs::create_directory(test_dir)) {
std::cout << "Created directory: " << test_dir << std::endl;
} else {
std::cerr << "Failed to create directory: " << test_dir << std::endl;
return 1;
}
}
for (int i = 1; i <= 3; ++i) {
fs::path file = test_dir / ("file" + std::to_string(i) + ".txt");
std::ofstream ofs(file);
if (ofs) {
ofs << "This is file " << i << "\n";
ofs.close();
std::cout << "Created file: " << file.filename() << std::endl;
} else {
std::cerr << "Failed to create file: " << file << std::endl;
}
}
std::cout << "\nContents of " << test_dir << ":" << std::endl;
for (const auto& entry : fs::directory_iterator(test_dir)) {
fs::path p = entry.path();
std::cout << " " << p.filename();
if (fs::is_regular_file(entry.status())) {
std::cout << " (file, " << fs::file_size(p) << " bytes)";
} else if (fs::is_directory(entry.status())) {
std::cout << " (directory)";
} else {
std::cout << " (other)";
}
std::cout << std::endl;
}
fs::path sub_dir = test_dir / "subdir";
if (fs::create_directory(sub_dir)) {
std::cout << "\nCreated subdirectory: " << sub_dir.filename() << std::endl;
fs::path src = test_dir / "file1.txt";
fs::path dst = sub_dir / "file1_copy.txt";
try {
fs::copy(src, dst, fs::copy_options::overwrite_existing);
std::cout << "Copied " << src.filename() << " to " << dst.filename() << std::endl;
} catch (const fs::filesystem_error& e) {
std::cerr << "Copy failed: " << e.what() << std::endl;
}
} else {
std::cerr << "Failed to create subdirectory: " << sub_dir << std::endl;
}
fs::path old_name = test_dir / "file2.txt";
fs::path new_name = test_dir / "renamed_file2.txt";
try {
fs::rename(old_name, new_name);
std::cout << "Renamed " << old_name.filename() << " to " << new_name.filename() << std::endl;
} catch (const fs::filesystem_error& e) {
std::cerr << "Rename failed: " << e.what() << std::endl;
}
fs::path to_remove = test_dir / "file3.txt";
if (fs::remove(to_remove)) {
std::cout << "Removed file: " << to_remove.filename() << std::endl;
} else {
std::cerr << "Failed to remove file: " << to_remove << std::endl;
}
std::cout << "\nFilesystem operations completed." << std::endl;
return 0;
}