Форум программистов, компьютерный форум CyberForum.ru

Нужна помощь в создании/удалении директорий. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Yukimir
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
26.08.2009, 13:31     Нужна помощь в создании/удалении директорий. #1
Есть потребность в рабочей папке создать временную директорию, а по завершении всех необходимых работ удалить ее. В виду того что изучением языка я занимаюсь всего второй месяц такая простоя задача поставила меня в тупик. Помогите кто сможет.

Вот на чем я пока застрял:

C++
1
2
3
4
5
6
7
    string tmp_direct;
    int k = 0;
    do
    {
        tmp_direct = put_isx + "\\TEMP"+ toString(k++) +"\\";
    }
    while(CreateDirectory((LPCWSTR)tmp_direct.c_str(), NULL) == 0);
Переменная put_isx типа string, функция toString(int k) самописная, преобразует целое число в string.

Первая проблема возникла в том что процедура CreateDirectory() наотрез отказалась принимать переменную типа string, путем нескольких махинаций мне удалось заставить компилятор скомпилировать это чудо, но в итоге каталог не создается и из цикла программа не выходит.

P.S. Имя каталога специально сделал переменным, это для того что бы в последствии программу можно было перевести в многопоточный режим. Я хотел для каждого потока выделить свой каталог в котором программа будет обрабатывать файлы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
26.08.2009, 13:55     Нужна помощь в создании/удалении директорий. #2
CreateDirectory((LPCWSTR)tmp_direct.c_str(), NULL)
CreateDirectoryA(tmp_direct.c_str(), NULL)
Yukimir
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
26.08.2009, 14:53  [ТС]     Нужна помощь в создании/удалении директорий. #3
Спасибо! Помогло. В следующий раз буду внимательней изучать библиотеки.

А если не сложно то можно написать команду удаления директории? Удаление файла я нашел в той же библиотеке а вот про директорию пока не нашел.
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
26.08.2009, 14:58     Нужна помощь в создании/удалении директорий. #4
Yukimir,
папка - это тоже файл(без разширения).
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
26.08.2009, 14:58     Нужна помощь в создании/удалении директорий. #5
А если не сложно то можно написать команду удаления директории? Удаление файла я нашел в той же библиотеке а вот про директорию пока не нашел.
Если директория пустая - то _rmdir (C) / RemoveDirectory (WinAPI)
если не пустая, то либо рекурсивно в цикле удалять файлы/директории до достижения пустоты, либо SHFileOperation с wFunc = FO_DELETE
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
26.08.2009, 20:58     Нужна помощь в создании/удалении директорий. #6
папка - это тоже файл(без разширения).
Ничего подобного - это файл специального вида !
У каталога вполне может быть расширение.
Для удаления пустого каталога есть отдельная функция - rmdir().
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
27.08.2009, 03:37     Нужна помощь в создании/удалении директорий. #7
odip,
Цитата Сообщение от odip Посмотреть сообщение
Ничего подобного - это файл специального вида !
Переименовывать как файл, но без разширения - возможно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <direct.h>        //int mkdir( const char *dirname );
 
using namespace std;
 
int main()//==============================================================
{
char dn[5] = "TEMP";
char dni[16];
char N[32];
 
    for( size_t i = 1; i < 7; i++)
    {
        strcpy( dni, dn );
         itoa( i, N, 10 );
         strcat( dni, N );
        //-----------------------------
        if( mkdir( dni ) == 0 )
        {              
            cout << "Directory " << dni << " easy created." << endl << endl;
            system( "pause" );//--------------------------------------------
            if( rmdir( dni ) == 0 )
                cout << "Directory " << dni << " was easy removed.";
            else
                cout << "Nnnnd\aaaaaaaa... no removing directory... ";
            cout << endl << endl;
        }
        else//--------------------------------------------------------------
        {
            cout << "Nnnnd\aaaaaaaa... no creating directory... " << dni;
            cout << endl << endl; 
        }
        system( "pause" );
    }        
 
system( "pause" );
return EXIT_SUCCESS;
}//=======================================================================
Цитата Сообщение от odip Посмотреть сообщение
Для удаления пустого каталога есть отдельная функция - rmdir()
А для непустого, какая?
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
27.08.2009, 21:12     Нужна помощь в создании/удалении директорий. #8
Переименовывать как файл, но без разширения - возможно?
не понял
А для непустого, какая?
Rififi в посте #5 ответил уже.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2009, 23:34     Нужна помощь в создании/удалении директорий.
Еще ссылки по теме:

C++ Нужна помощь с программой
C++ Нужна помощь с ассемблером.
C++ Нужна помощь с комментариями.
C++ Нужна помощь по алгоритму
C++ Нужна помощь с программой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
27.08.2009, 23:34     Нужна помощь в создании/удалении директорий. #9
odip,
Цитата Сообщение от odip Посмотреть сообщение
папка - это тоже файл(без разширения).
Ничего подобного - это файл специального вида !
Ошибся!(каюсь)
Цитата Сообщение от odip Посмотреть сообщение
Переименовывать как файл, но без разширения - возможно?
Цитата Сообщение от odip Посмотреть сообщение
не понял
rename( "TEMP", "PMET");(вот о чем я тогда подумал)
переименовывает и папки, и файлы.
Yandex
Объявления
27.08.2009, 23:34     Нужна помощь в создании/удалении директорий.
Ответ Создать тему
Опции темы

Текущее время: 07:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru