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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как переименовать папку с файлами, неужели так трудно 
V
    Опции темы
apook
Дата 4.12.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как переименовать папку с файлами Средствами С Спп (не System и т.д) 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
_hunter
Дата 4.12.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



как ни странно -- rename()


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
apook
Дата 4.12.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



странно
MoveFile долбил че-то

а вот с удапением директории тоже глюки hunter не подскажешь что нибудь
гениальное?


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
_hunter
Дата 4.12.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



_rmdir smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
apook
Дата 4.12.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понятноhttp://forum.vingrad.ru/html/emoticons/rtfm.gif
smile

Корочи дело к ноче
findfirst не признает папку с именем 2 папкой как же я (программаhttp://forum.vingrad.ru/html/emoticons/cool.gif
smile)узнаю что это папка ?!... 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Anikmar
Дата 4.12.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Это смотря как флаги в findfirst настроить. Она может только папки признавать, если есть желание...
PM MAIL ICQ   Вверх
apook
Дата 4.12.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



FA_DIREC че то лажу прогоняет именно флаг

if( ffblk.ff_attrib ==FA_DIREC  )   --???

Это ладно

if( ffd.dwFileAttributes ==FILE_ATTRIBUTE_DIRECTORY )

по

WIN32_FIND_DATA ffd;
HANDLE hr;

не узнает папку с именем 'цифра' тогда как с именем 'буква' OK!


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Anikmar
Дата 4.12.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



if( ffd.dwFileAttributes ==FILE_ATTRIBUTE_DIRECTORY )

А разве так правильно? Там только этот флаг должен присутствовать? Там может еще быть флаг "Архивный" "Системный" надо проверять не на равенство флагу, а на его присутствие там

Например так:
if( (ffd.dwFileAttributes&&FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)

PM MAIL ICQ   Вверх
apook
Дата 4.12.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Цитата

Например так:
if( (ffd.dwFileAttributes&&FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)

Так не прет

if( (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
Так работает 
Равно как и
if( ffd.dwFileAttributes ==FILE_ATTRIBUTE_DIRECTORY ) // найдена папка

Но
Оказывается все гон про если цифра то не признает !
Если имя из одного символа то не видит как папку ???  


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Anikmar
Дата 4.12.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Насчет && - это я перестарался

Если не признает из 1 символа, может там маска как-то неправильно задана? Чудеса какие-то...
PM MAIL ICQ   Вверх
apook
Дата 4.12.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот код может кому не в лом.
Код

bool DelDir( char *DirName )
{
char *Temp =new char[strlen(DirName) +13];
char *Temp2 =new char[13];


WIN32_FIND_DATA ffd;
HANDLE hr;

strcat( DirName, "\\" );
strcpy( Temp, DirName );

if ( strlen(DirName) )
{
   strcpy( Temp, DirName );
   strcat( Temp, "\\*.*" );
   hr = FindFirstFile( Temp, &ffd );

   if( hr != INVALID_HANDLE_VALUE )
   do
   {
      strcpy( Temp, DirName ); 
      strcat( Temp, "\\" );
      strcat( Temp, ffd.cFileName );

      if( (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='\0')
      ||  (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='.' && ffd.cFileName[2] !='\0') )
      {
         if( (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
         {      // найдена папка

            SetFileAttributes( Temp, 0 );   // сброс аттрибутов
            DelDir( Temp );                 // рекурсивно удаляется содержимое
            RemoveDirectory( Temp );        // удалить пустую папку
            }
         else   // иначе найден файл
         {
            SetFileAttributes( Temp, 0 );  // сброс аттрибутов
            DeleteFile( Temp );            // удалить файл
            }
            }

      memset( Temp, NULL, sizeof(Temp) );

      }   while( FindNextFile( hr, &ffd ) !=0 ); // пока не найдем все ...  
   FindClose( hr );
   }
RemoveDirectory( DirName );

delete [] Temp;
delete [] Temp2;

return true;
}

Хорошая функция  еще бы работала как надо

Создаю папку "D:\\folder\\$$$\\a"  -- задачя удалить папку $$$ и все ее содержимон
результат ПЛОХО!
 
Создаю папку "D:\\folder\\$$$\\aa" -- задачя та-же
результат OТЛИЧНО!

Где ошибка или сходить за поллитрой



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
JackYF
Дата 4.12.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(apook @  4.12.2006,  18:18 Найти цитируемый пост)
 if( (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='\0')
      ||  (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='.' && ffd.cFileName[2] !='\0') )


Возможно, ошибка кроется здесь.
Ведь нигде не проверяется, существуют ли символы по смещениям 0..2.
Ведь в случае короткого имени ffd.cFileName[2] кажись вообще непонятно на что ссылается...



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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Интересно сделано условие:

     if( (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='\0')
      ||  (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='.' && ffd.cFileName[2] !='\0') )

Допустим у нас любое имя файла из 1 символа.
Первому условию - не удовлетворяет
Второму условию - тоже не удовлетворяет

Результат: Не работает!

Добавлено @ 18:33 
Хороший все-таки форум. Пока пишешь ответ - за тебя уже кто-нибудь ответит. Хорошо, когда народу много - долго ждать не приходится. А я про него только недавно узнал. Все сидел на Xportal... (Кстати почему-то рухнул)
PM MAIL ICQ   Вверх
VectorMan
  Дата 4.12.2006, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antihero
*


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

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



Цитата(apook @ 4.12.2006,  18:18)
Вот код может кому не в лом.
Код

char *Temp =new char[strlen(DirName) +13];

...

memset( Temp, NULL, sizeof(Temp) );

sizeof(Temp) у тебя 4 байта (размер указателя), а не размер выделенной памяти 
PM   Вверх
apook
Дата 4.12.2006, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

    if( (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='\0')
     ||  (ffd.cFileName[0] !='.' && ffd.cFileName[1] !='.' && ffd.cFileName[2] !='\0') )

Вы правы ошибка здесь!

Цитата

sizeof(Temp) у тебя 4 байта (размер указателя), а не размер выделенной памяти  

VectorMan  учтем

Может кто предложит решение хотя вопрос решен но как то не ....
написал функцию типа strstr только на точное совпадение

if( (strstrA( ffd.cFileName, "." ) ==-1) && (strstrA( ffd.cFileName, ".." ) ==-1) )




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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