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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Создание директорий - C++

16.10.2013, 12:04. Просмотров 763. Ответов 11
Метки нет (Все метки)

Здорова господа!!!

Мне нужно динамически создавать директории в виндовс, нашол функцию CreateDirectoryW().
Но она работает только если явно (статически) пропишешь название директории, а мне нужно через переменную.

Вот код который не работает:
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
#include <iostream>
using std::cout;
using std::endl;
#include <cctype>
#include <string>
using std::string;
#include <algorithm>
using std::transform;
#include <Windows.h>
 
char f(char c){return tolower(c);}
 
int main()
{
    CreateDirectoryW(L"New_cat",NULL);
    //все хорошо создается, но мне нужно динамически определять имя переменной
    //например ниже код не работает
    string s="text_";
    
    for(int i=0;i<9;i++)
    {
        string s1=s;
        s1+=char(i+'0');
        s1+=".txt";
        CreateDirectoryW(s,NULL);
    }
 
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 12:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание директорий (C++):

Создание/копирование/переименование/удаление файлов и директорий - C++
Есть такие задания: 1) Выполнение создания/копирование/переименования/удаления файлов; 2) Выполнение...

Рекурсивный обход директорий - C++
Уважаемые Гуру, требуется ваша помошь. Мне необходимо реализовать рекурсивный обход директорий,начиная с заданной. У меня есть класс с...

Транслитерация названия директорий - C++
Задался вопросом написать функцию транслитерации названия директорий. Написал рекурсивную функцию перебора директорий, все работает. ...

Работа с деревом файлов/директорий - C++
Подскажите, пожалуйста, как преобразовать список из файлов и папок (гарантируется, что они описывают дерево с одним корнем - корневой...

Как создать папку в неизвестной директорий - C++
Приветствую уважаемые посетители cyberforum! У меня один вопрос: 1) Как можно создать папку в неизвестной директорий, но что бы в...

Нужна помощь в создании/удалении директорий. - C++
Есть потребность в рабочей папке создать временную директорию, а по завершении всех необходимых работ удалить ее. В виду того что изучением...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.10.2013, 12:06 #2
ninja2, Ну использовать нужно CreateDirectory, который соответственно развернется в нужное (A/W). Во-вторых - туда должен подаваться char*/wchar_t*, то есть s.c_str().
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.10.2013, 12:15  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Ну использовать нужно CreateDirectory, который соответственно развернется в нужное (A/W).
Это не понял куда развернется?
Цитата Сообщение от ForEveR Посмотреть сообщение
Во-вторых - туда должен подаваться char*/wchar_t*, то есть s.c_str().
Я все варианты перепробовал и s.cstr() и (char*)s.str() ничего не работает.

Добавлено через 33 секунды
Туда нужно передавать тип LPCWSTR.

Добавлено через 4 минуты
А что такое L в коде ниже?
C++
1
CreateDirectoryW(L"new_cat",NULL);
Нипойму на что оно похоже.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.10.2013, 12:17 #4
ninja2, Язык изучайте прежде чем в WinAPI лезть. L"" - wide-char литерал, имеет тип const wchar_t[n], где n кол-во символов + '\0'. CreateDirectory является макросом, который в зависимости от конфигурации проекта развернется либо в CreateDirectoryA, если юникод выключен и в CreateDirectoryW, если юникод включен. Соотстветственно LPCTSTR разворачивается либо в char*, либо в wchar_t*.
При явном вызове CreateDirectoryW соотстветственно туда должен передаваться wchar_t*, string просто так в wchar_t* не конвертируешь, однако можно использовать wstring.
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
16.10.2013, 12:17 #5
Цитата Сообщение от ninja2 Посмотреть сообщение
Туда нужно передавать тип LPCWSTR.
Это в CreateDirectoryW нужно передавать LPCWSTR.
ForEveR вам говорит, что нужно заменить CreateDirectoryW на CreateDirectory. Зачем вам непременно в юникоде туда передавать.

Цитата Сообщение от ninja2 Посмотреть сообщение
Я все варианты перепробовал и s.cstr() и (char*)s.str() ничего не работает.
Конечно не заработает. Вы же не юникод ему подсовываете, а он именно его хочет. Если последуете совету ForEveR, то будет вам счастье.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.10.2013, 12:24  [ТС] #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
нужно заменить CreateDirectoryW на CreateDirectory.
Заменил CreateDirectory("New_cat",NULL); и не работает ошибка: "невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR""
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.10.2013, 12:25 #7
ninja2, Ну значит проект настроен на Unicode. Читаем внимательно. Либо перенастраиваем проект, либо юзаем wchar_t*, wstring.
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.10.2013, 12:36  [ТС] #8
Цитата Сообщение от ForEveR Посмотреть сообщение
Язык изучайте прежде чем в WinAPI лезть.
А что за язык С++?
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.10.2013, 12:36 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Либо перенастраиваем проект, либо юзаем wchar_t*, wstring.
вроде бы достаточно использовать макрос _T или TEXT:
C++
1
CreateDirectory( TEXT("New_cat"),NULL);
2
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.10.2013, 12:37  [ТС] #10
Цитата Сообщение от ForEveR Посмотреть сообщение
Ну значит проект настроен на Unicode.
Что это означает - файлы проекта в кодировке unicode???
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.10.2013, 12:41 #11
Tulosba, Точно, совсем забыл.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.10.2013, 12:59  [ТС] #12
Цитата Сообщение от Tulosba Посмотреть сообщение
вроде бы достаточно использовать макрос _T или TEXT:
И как мне для функций его использовать он код не работает:
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
#include <iostream>
using std::cout;
using std::endl;
#include <cctype>
#include <string>
using std::string;
using std::wstring;
#include <algorithm>
using std::transform;
#include <Windows.h>
 
 
char f(char c){return tolower(c);}
 
int main()
{
    //все хорошо создается, но мне нужно динамически определять имя переменной
    //например ниже код не работает
    
    for(int i=0;i<9;i++)
    {
        string s="text_";
        s+=char(i+'0');
        s+=".txt";
        CreateDirectory(TEXT(s.c_str()),NULL);
        //CreateDirectory(,NULL);
    }
 
 
    return 0;
}
А если я просто подставляю в виде строки : CreateDirectory(TEXT("s.c_str()"),NULL);, то создается один каталог.

Добавлено через 12 минут
wstring буду использовать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 12:59
Привет! Вот еще темы с ответами:

Рекурсивная функция вывода всех файлов и директорий - C++
функция ищет все файлы включая директории с набором др. файлов и директорий при этом выводит их на экран. Вместо того, чтобы вывести...

Расщепление полного пути к файлу на диск, директорий...(неясность в задании) - C++
Доброго времени суток! Не ожидал от препода излишней адекватности,но сейчас я в ступоре... вот текст задания: &quot; Написать функцию...

Как написать программу, удаляющую несколько файлов из разных директорий каждые 5 секунд? - C++
Здравствуйте, уважаемы форумчани! Ситуация такая: нужно удалять несколько файлов из разных директории каждые 5 секунд. Подскажите...

Создание директорий - Delphi
Здравствуйте, подскажите пожалуйста каким образом и с помощью какого компонента можно создать похожие директории со списками, если не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.10.2013, 12:59
Ответ Создать тему
Опции темы

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