Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

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

16.10.2013, 12:04. Показов 6334. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2013, 12:04
Ответы с готовыми решениями:

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

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

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

11
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.10.2013, 12:06
ninja2, Ну использовать нужно CreateDirectory, который соответственно развернется в нужное (A/W). Во-вторых - туда должен подаваться char*/wchar_t*, то есть s.c_str().
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
16.10.2013, 12:15  [ТС]
Цитата Сообщение от 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
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.10.2013, 12:17
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
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
16.10.2013, 12:17
Цитата Сообщение от ninja2 Посмотреть сообщение
Туда нужно передавать тип LPCWSTR.
Это в CreateDirectoryW нужно передавать LPCWSTR.
ForEveR вам говорит, что нужно заменить CreateDirectoryW на CreateDirectory. Зачем вам непременно в юникоде туда передавать.

Цитата Сообщение от ninja2 Посмотреть сообщение
Я все варианты перепробовал и s.cstr() и (char*)s.str() ничего не работает.
Конечно не заработает. Вы же не юникод ему подсовываете, а он именно его хочет. Если последуете совету ForEveR, то будет вам счастье.
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
16.10.2013, 12:24  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
нужно заменить CreateDirectoryW на CreateDirectory.
Заменил CreateDirectory("New_cat",NULL); и не работает ошибка: "невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR""
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.10.2013, 12:25
ninja2, Ну значит проект настроен на Unicode. Читаем внимательно. Либо перенастраиваем проект, либо юзаем wchar_t*, wstring.
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
16.10.2013, 12:36  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Язык изучайте прежде чем в WinAPI лезть.
А что за язык С++?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.10.2013, 12:36
Цитата Сообщение от ForEveR Посмотреть сообщение
Либо перенастраиваем проект, либо юзаем wchar_t*, wstring.
вроде бы достаточно использовать макрос _T или TEXT:
C++
1
CreateDirectory( TEXT("New_cat"),NULL);
2
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
16.10.2013, 12:37  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Ну значит проект настроен на Unicode.
Что это означает - файлы проекта в кодировке unicode???
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.10.2013, 12:41
Tulosba, Точно, совсем забыл.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
16.10.2013, 12:59  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2013, 12:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru