1

Тема: створення класу Dir

в даному класі треба передбачити виведення вмісту каталогу по заданому шляху, створення файлу, видалення файлу, створення і видалення каталогу
Допоможіть будь-ласка!!!
ось все що я написав!!! не знаю як працювати з каталогами і як ці операції описати в методах.

#include<iostream>
#include <fstream>
#include<ostream>
#include<string.h>
#include<direct.h>
#include<stdio.h>

using namespace std;
class DIR
{
    char Path[256];
public:
    
    DIR()
    {
        
    }
    
};
void File_save()
{
    fstream Dir;
    Dir.open("text1.txt");
}
void rename_file()
{

}
void Del_file()
{

}
void add_dir()
{

}
void del_dir()
{

}

void Menu()
{
    cout << "\t    menu:DIRECTORY" << endl;
    cout << "1 - вывести содержимое каталога" << endl;
    cout << "2 - создать файл" << endl;
    cout << "3 - переименовать файл" << endl;
    cout << "4 - создать каталог" << endl;
    cout << "5 - удалить каталог" << endl;
    cout << "6 - EXIT" << endl;
};

int main()
{
    string text;
    DIR d;
    int Menu = 0;
    system("cls");
    cin >> Menu;
    switch (Menu)
    {
    case 1:
        cout << "" << endl;
        break;

    case 2:
        cout << "вывод содержимого каталога " << endl;
        break;

    case 3:

        break;
    case 4:

        break;
    case 5:

        break;

    }
while (Menu!=6)
system("pause");
}

2

Re: створення класу Dir

У C++ (принаймні, до C++20) нема функцій для роботи з каталогами. Вам доведеться або використовувати функції операційної системи (<window.h> чи <dirent.h> в Posix); або ж взяти якусь кросплатформенну бібліотеку.

3

Re: створення класу Dir

mkdir?

4

Re: створення класу Dir

То як мені методи реалізувати?

5

Re: створення класу Dir

Прочитати щось про відповідні методи у згаданих бібліотеках.

6

Re: створення класу Dir

літературу можете підказати?

7

Re: створення класу Dir

Навряд чи я тут буду кращим за Гугл і Stack Overflow.
Тим більше, що я навіть не знаю, під яку ОС ви пишете.

Подякували: leofun011

8

Re: створення класу Dir

Будь ласка, перекладіть це. Ви порушуєте п.1.1 Правил.

9

Re: створення класу Dir

ОК
створити клас Dir. Передбачити методи:
1) виведення вмісту каталогу по заданому шляху
2) перейменування файлу
3) видалення ффайлу
4) сворення каталогу
5) видалення каталогу

10

Re: створення класу Dir

Загальний список: https://docs.microsoft.com/en-us/window … -functions
1) https://docs.microsoft.com/en-us/window … -directory
2) https://docs.microsoft.com/en-us/window … e-movefile
3, 5) https://docs.microsoft.com/en-us/window … eletefilea
4) https://docs.microsoft.com/en-us/window … reatefilea

Подякували: leofun011

11

Re: створення класу Dir

невелике доповнення: для видалення каталогу юзайте RemoveDirectory, але перед цим потрiбно видалити все в ньому (рекурсивно).

Подякували: koala1

12

Re: створення класу Dir

Зробив деякі методи. А хто може щось підказати по перегляду вмісту каталогу? Як це реалізувати? Якщо я правильно розумію, то цей метод найбільший (по коду) і найскладніший.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <fstream>
#include<ostream>
#include<string.h>
#include<direct.h>
#include<stdio.h>

using namespace std;
class DIR
{
    char sPath[256];
    char sPName[256];
public:

    char* GetsPath()
    {
        return sPath;
    }
    void add_file()
    {
        fstream Dir;
        Dir.open("text1.txt");
        Dir << "test" << endl;
    }
    
   
    void Dir_create()
    {
       //

        strcpy(sPath, "B:\\SHAG2020");
        if (_mkdir(sPath) == 0)
            printf("Creation \r\n%s\r\n SUCCESFULLY COMPLETED\r\n", sPath);
    }
    void ShowDirectory(const char* path)
    {

    }
    void rename_file()
    {

    }
    void Del_file()
    {

    }
   
    void del_dir()
    {
        strcpy(sPath, "B:\\SHAG2020");
        if (rmdir(sPath) == 0)
            printf("%s\r\n SUCCESFULLY DELETED\r\n", sPath);
    }
   
};

void Menu()
{
    cout << "\t    menu:DIRECTORY" << endl;
    cout << "1 - вывести содержимое каталога" << endl;
    cout << "2 - создать файл" << endl;
    cout << "3 - переименовать файл" << endl;
    cout << "4 - создать каталог" << endl;
    cout << "5 - удалить каталог" << endl;
    cout << "6 - EXIT" << endl;
}

int main()
{
    string text;
    DIR d;
    int Menu = 0;
    system("cls");
    cin >> Menu;
    switch (Menu)
    {
    case 1:
        d.ShowDirectory("B:\\SHAG2020");
        cout << "" << endl;
        break;

    case 2:
        cout << "вывод содержимого каталога " << endl;


        break;

    case 3:

        break;
    case 4:
        d.Dir_create();
        break;
    case 5:
        d.del_dir();
        break;

    }
    while (Menu != 6)
        system("pause");
}

13

Re: створення класу Dir

char sPath[256];  *FACEPALM*

14

Re: створення класу Dir

що не так в цьому рядку?

15 Востаннє редагувалося koala (29.05.2020 14:07:09)

Re: створення класу Dir

Найдовше, але насправді нічого складного. Є три функції: FindFirstFile, FindNextFile і FindClose. Їм потрібна також спеціальна структура WIN32_FIND_DATA і логічний номер HANDLE (специфічне поняття Windows, означає керований через цей номер системний об'єкт) для підтримки пошуку.

WIN32_FIND_DATA ffd;
HANDLE hFind = FindFirstFile("DRIVE:\\PATH\\*", &ffd); //починаємо перебір
if(hFind != INVALID_HANDLE_VALUE ){
  do {
    //тут розбираєте поточний вміст ffd
  }while(FindNextFile(hFind, &ffd));
  FindClose(hFind); //завершуємо перебір і звльняємо handle
}

І не звертайте уваги на ur_naz, він вічно незадоволений. Взагалі, звісно, це погано робити фіксовані масиви для змінних невідомої довжини, але поки навчаєтеся - якось можна пережити.

16

Re: створення класу Dir

це метод перебору вмісту каталогу? мені казали, що перегляд вмісту десь на 50 рядків коду
але видалення каталогу ще складніше.

17

Re: створення класу Dir

Ну, можна дещо ускладнити, якщо додати рекурсію. Це перебирає лише файли і теки в поточному каталозі, не в підкаталогах.

18

Re: створення класу Dir

Ага, я бачу, вам порадили досівський direct.h. Ні, звісно, можете спробувати, якщо він є у вашого компілятора. Але останній MS DOS 8.0 вийшов 20 років тому у складі Windows Me, і його підтримка припинилася в 2006 році. Звісно, важливіше зрозуміти принцип, ніж конкретні функції, але якось це сумно вивчати в 2020 році технології 1980-х.

19

Re: створення класу Dir

а як це зробити з рекурсією?

20

Re: створення класу Dir

Думай. Те.