Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]Создание цепочки директорий, strtok не предлагать 
V
    Опции темы
En_t_end
Дата 3.7.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 2
Всего: 20



Код

void create_dirs(char* full_path,unsigned int path_len) //caution!!!
{
    for(unsigned int n=0;n<path_len+1;)
    {
        unsigned int i;
        for(;i<path_len+1 && full_path[i] != SLASH;i++);
        if(i!=path_len+1) full_path[i] = '\0';
        MKDIR(full_path);
        if(i!=path_len+1) full_path[i] = SLASH;
        n = i+1;
    }
}

Как вариант создает цепочку всех промежуточных директорий.
Не устраивает собственно тупость своего кода, ибо требовать в данном случае non-const для пути к последней директории - есть зло. Конечно, можно и в случае non-const сделать используя strtok, но это меня не устраивает уже по двум причинам, вторая:
Код

Each function uses a static variable for parsing the string into tokens
MSDN

Да если честно мой способ тоже грешен подчти этим же но косвенно. Если указатель будет указывать на данные, паралельно обратывающиеся ещё где-то, то придется создавать копию данных. А этого я как раз хотел избежать, ибо понятно, что можно тем же кодом пользоваться просто создавая у себя копию данных.

Добавлено @ 18:02
Короче опять задача из разряда "и рыбку съесть и на елку сесть" :(

Это сообщение отредактировал(а) En_t_end - 3.7.2007, 20:15
PM MAIL ICQ Skype GTalk Jabber   Вверх
Koshibot
Дата 3.7.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.6.2007

Репутация: нет
Всего: нет



ваааагх чел используй strtok
PM MAIL   Вверх
JackYF
Дата 3.7.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(Koshibot @  3.7.2007,  18:09 Найти цитируемый пост)
ваааагх чел используй strtok 

мдя, смотри название и подпись к теме

хм, задача абсолютно логичная... мой вариант: используй последовательный поиск слэшей (что ты и делаешь) + strcat'ом накапливай новую строку, содежащую текущую несозданную директорию. Не самый лучший вариант, надо бы еще подумать.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
En_t_end
Дата 3.7.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 2
Всего: 20



Цитата(JackYF @  3.7.2007,  22:19 Найти цитируемый пост)
 strcat'ом накапливай новую строку

опять же придется выделять память :(
PM MAIL ICQ Skype GTalk Jabber   Вверх
JackYF
Дата 3.7.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(En_t_end @  3.7.2007,  18:22 Найти цитируемый пост)
опять же придется выделять память :(

та да, но фукнции а-ля mkdir требуют же null-terminated параметр, я так понимаю? или изменять переданную строку (что, имхо, хуже), либо создавать что-то новое.

Кстати, а неужели здесь производительность настолько критична? неужели на целевой системе создаются громады вложенных директорий? имхо, пусть будет чуть медленный, зато c большей претензией на thread-safe, да и параметры константные останутся.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
En_t_end
Дата 3.7.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 2
Всего: 20



Цитата(JackYF @  3.7.2007,  22:35 Найти цитируемый пост)
та да, но фукнции а-ля mkdir требуют же null-terminated параметр, я так понимаю? или изменять переданную строку (что, имхо, хуже), либо создавать что-то новое.

да нужна null-terminated строка.
Цитата(JackYF @  3.7.2007,  22:35 Найти цитируемый пост)
Кстати, а неужели здесь производительность настолько критична?

я не знаю smile просто хочется максимальной эффективности.
Цитата(JackYF @  3.7.2007,  22:35 Найти цитируемый пост)
мхо, пусть будет чуть медленный, зато c большей претензией на thread-safe, да и параметры константные останутся.

придется так и сделать :(.

PM MAIL ICQ Skype GTalk Jabber   Вверх
likehood
Дата 3.7.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 12
Всего: 24



Проще всего создать копию исходной строки. Тогда алгоритм даже менять не придется.
PM MAIL   Вверх
En_t_end
Дата 3.7.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 2
Всего: 20



Цитата(likehood @  4.7.2007,  00:12 Найти цитируемый пост)
Проще всего создать копию исходной строки. Тогда алгоритм даже менять не придется.

Цитата(En_t_end @  3.7.2007,  22:01 Найти цитируемый пост)
А этого я как раз хотел избежать, ибо понятно, что можно тем же кодом пользоваться просто создавая у себя копию данных.


PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1148 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.