Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > Удалить каталог


Автор: Akina 16.4.2007, 16:53
Имеется компьютер под управлением, скажем, Windows XP SP 2 Rus. На томе NTFS, локальный драйв C:, bootable & system, в корневом каталоге имеется пустой (не содержащий файлов) каталог с именем

Винни-Пух и все-все-все...

Все попытки его удалить (через Эксплорер или в командной строке) оканчиваются неудачей - система сообщает, что каталог не найден.

Объясните причину возникновения ошибки и предложите способ удаления данного каталога.

Автор: spin2 16.4.2007, 23:19
Из Эксплорер удалился и ничего не спросил. Из командной строки отработала команда 
Код

rmdir "Винни-Пух и все-все-все"

При этом по команде dir название каталога так и выводилось без "...". Имя каталога без проблем подставлялось по автодополнению по tab, без "...".

Автор: Любитель 9.9.2007, 21:20
А как ты создал такую папку? smile Сейчас проверил - из-под винды просто игнорятся точки в конце имени файла/папки smile

Как удалить из винды - даже не знию, блин! smile

Добавлено через 4 минуты и 12 секунд
А переименовать не получается?

Автор: apook 15.9.2007, 14:56
Программка для демонстрации:
Код

#include<stdio.h>
#include<windows.h>
#include<conio.h>


int main()
{
int i;
char *old_name="C:\\data.txt", *new_name="C:\\Винни Xух и все все все...\\";

FILE *hf;

printf( "1. Создать файл с кривым именем\n2. Удалить файл с кривым именем\n" );
scanf( "%d", &i );

switch( i )
{
    case 1:
    hf=fopen( old_name, "w+" ); 
    if( !hf )
    {
        printf( "Cant Create file %s", old_name );
        return 0;
        }
    fcloseall();

    if ( !MoveFile(old_name, new_name) ) 
    { 
        printf( "Could not move file %s" );
        }
        break;

    case 2:
        system( "del \\\\?\\C:\\\"Винни Xух и все все все..\"" );
        break;

    case 3:
        printf( "%d - namber is not valid", i );
        break;
  
    }

return 0;
}


Автор: apook 15.9.2007, 15:55
Конкретно по вопросу: Оказывается существует Соглашение об именах файлов (Filename Conventions), в этом документке говорится о том какие символы допустимо использовать в именах файлов, максимальная длина пути и т.д, там же оговариваются и ограничения в часности то что имена файлов не могут оканчиваться пробелом(неизвестно почему)или точкой(чтоб нельзя было создать файл с именем например(".."). Обойти эти ограничения оказывается можно! Например использовать UNC(Universal Naming Convention)пути для операций с файлами.  UNC это формат для записи пути к файлу расположенному на удаленном компьютере. Он имеет вид "\\server\share\path", Для локально машины сервер обозначается "?" т.е \\?\C:\"Винни Пух и все все все.." это файл на диске С: с именем "Винни Пух и все все все.."... Далее примеры создания и удаления каталога с кривым(с точки зрения системы) именем каталога "Винни Пух и все все все.."
Код

::создание
mkdir \\?\C:\"Винни ППух и все все все.."


Код

::удаление
rd /q \\?\C:\"Винни ППух и все все все.."

Автор: Alix 8.10.2007, 21:25
Статья на эту тему:
http://www.xakep.ru/magazine/xa/062/080/1.asp

Автор: farcaz 29.11.2007, 01:46
жестак отформатируй ... точно удалится!
Зачем задавать никому неинтересные вопросы???  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)