Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Написать программу на C++

fixsnow233 Ученик (118), на голосовании 5 месяцев назад
Реализовать простейший файловый менеджер с использованием ООП (классы,
наследование и так далее).
Файловый менеджер должен иметь такие возможности:
■ показывать содержимое дисков;
■ создавать папки/файлы;
■ удалять папки/файлы;
■ переименовывать папки/файлы;
■ копировать/переносить папки/файлы;
■ вычислять размер папки/файла;
■ производить поиск по маске (с поиском по подпапкам) и так далее.
Голосование за лучший ответ
olimchik Мастер (1233) 6 месяцев назад
часть1
 #include  
#include
#include
#include

namespace fs = std::filesystem;

class FileOperations {
public:
static void createFile(const std::string& path) {
std::ofstream file(path);
if (file.is_open()) {
file.close();
std::cout << "File created: " << path << std::endl;
} else {
std::cerr << "Error creating file: " << path << std::endl;
}
}

static void deleteFile(const std::string& path) {
if (fs::remove(path)) {
std::cout << "File deleted: " << path << std::endl;
} else {
std::cerr << "Error deleting file: " << path << std::endl;
}
}

static void renameFile(const std::string& oldPath, const std::string& newPath) {
try {
fs::rename(oldPath, newPath);
std::cout << "File renamed from " << oldPath << " to " << newPath << std::endl;
} catch (const fs::filesystem_error& e) {
std::cerr << "Error renaming file: " << e.what() << std::endl;
}
}

static void copyFile(const std::string& source, const std::string& destination) {
try {
fs::copy(source, destination, fs::copy_options::overwrite_existing);
std::cout << "File copied from " << source << " to " << destination << std::endl;
} catch (const fs::filesystem_error& e) {
std::cerr << "Error copying file: " << e.what() << std::endl;
}
}
};

class DirectoryOperations {
public:
static void createDirectory(const std::string& path) {
if (fs::create_directory(path)) {
std::cout << "Directory created: " << path << std::endl;
} else {
std::cerr << "Error creating directory: " << path << std::endl;
}
}

static void deleteDirectory(const std::string& path) {
if (fs::remove_all(path)) {
std::cout << "Directory deleted: " << path << std::endl;
} else {
std::cerr << "Error deleting directory: " << path << std::endl;
}
}

static void renameDirectory(const std::string& oldPath, const std::string& newPath) {
try {
fs::rename(oldPath, newPath);
std::cout << "Directory renamed from " << oldPath << " to " << newPath << std::endl;
} catch (const fs::filesystem_error& e) {
std::cerr << "Error renaming directory: " << e.what() << std::endl;
}
}
olimchikМастер (1233) 6 месяцев назад
часть2
     static uintmax_t calculateSize(const std::string& path) { 
uintmax_t size = 0;
for (const auto& entry : fs::recursive_directory_iterator(path)) {
if (fs::is_regular_file(entry.path())) {
size += fs::file_size(entry.path());
}
}
return size;
}

static void searchFiles(const std::string& path, const std::string& mask) {
for (const auto& entry : fs::recursive_directory_iterator(path)) {
if (fs::is_regular_file(entry.path()) && entry.path().filename().string().find(mask) != std::string::npos) {
std::cout << "Found: " << entry.path().string() << std::endl;
}
}
}
};
olimchikМастер (1233) 6 месяцев назад
часть3
  
class FileManager {
public:
static void showContents(const std::string& path) {
for (const auto& entry : fs::directory_iterator(path)) {
std::cout << entry.path().string() << std::endl;
}
}
};

int main() {
// Примеры использования
std::string basePath = "."; // Текущая директория

// Показать содержимое директории
FileManager::showContents(basePath);

// Работа с файлами
FileOperations::createFile("example.txt");
FileOperations::renameFile("example.txt", "example_renamed.txt");
FileOperations::copyFile("example_renamed.txt", "example_copy.txt");
FileOperations::deleteFile("example_renamed.txt");
FileOperations::deleteFile("example_copy.txt");

olimchikМастер (1233) 6 месяцев назад
часть4
     // Работа с директориями 
DirectoryOperations::createDirectory("example_dir");
DirectoryOperations::renameDirectory("example_dir", "example_dir_renamed");
uintmax_t size = DirectoryOperations::calculateSize("example_dir_renamed");
std::cout << "Directory size: " << size << " bytes" << std::endl;
DirectoryOperations::searchFiles(basePath, "example");
DirectoryOperations::deleteDirectory("example_dir_renamed");

return 0;
}
olimchikМастер (1233) 6 месяцев назад
1. FileOperations - содержит статические методы для создания, удаления, переименования и копирования файлов.
2. DirectoryOperations - содержит статические методы для создания, удаления, переименования директорий, вычисления их размера и поиска файлов по маске.
3. FileManager - основной класс, который управляет отображением содержимого директорий.

Этот простой файловый менеджер демонстрирует базовые операции с файлами и директориями, используя ООП в C++.
Похожие вопросы