Directory.Move: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.04.17 16:00
Оценка:
string dir1 = Path.Combine(Path.GetTempPath(), "tmp");
string dir2 = Path.Combine(Path.GetTempPath(), "TMP");

Directory.CreateDirectory(dir1);
Directory.Move(dir1, dir2);
Отредактировано 13.04.2017 6:24 samius . Предыдущая версия .
Re: Минутка WTF-20: кто тут Буратино?
От: dmitry_npi Россия  
Дата: 08.04.17 11:37
Оценка:
Здравствуйте, samius, Вы писали:

S>[cs]

S>string dir1 = Path.Combine(Path.GetTempPath(), "tmp");
S>string dir2 = Path.Combine(Path.GetTempPath(), "TMP");

S>Directory.CreateDirectory(dir1);

S>Directory.Move(dir1, dir2);

Нельзя переместить директорию саму в себя. А вы чего ожидали? Или это .NET Core на Linux?
Атмосферная музыка — www.aventuel.net
Re[2]: Минутка WTF-20: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.04.17 15:35
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Здравствуйте, samius, Вы писали:


_>Нельзя переместить директорию саму в себя.

Почему же? Где об этом написано?
_>А вы чего ожидали? Или это .NET Core на Linux?
Именно этого и ожидал. Нет, это обычный дотнет на Win10.
Re[3]: Минутка WTF-20: кто тут Буратино?
От: const_volatile  
Дата: 08.04.17 15:57
Оценка:
Здравствуйте, samius, Вы писали:

_>>Нельзя переместить директорию саму в себя.

S>Почему же? Где об этом написано?

как ты себе это представляешь? т.е. вот есть сумка, как полжить её в саму себя?

_>>А вы чего ожидали? Или это .NET Core на Linux?

S>Именно этого и ожидал. Нет, это обычный дотнет на Win10.

при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?
Re[4]: Минутка WTF-20: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.04.17 16:02
Оценка:
Здравствуйте, const_volatile, Вы писали:

_>Здравствуйте, samius, Вы писали:


_>>>Нельзя переместить директорию саму в себя.

S>>Почему же? Где об этом написано?

_>как ты себе это представляешь? т.е. вот есть сумка, как полжить её в саму себя?


Нормально представляю. Жаль, что не все такое могут себе представить.
Я не прошу сумку положить в себя. Я прошу дать ей новое символическое имя. В том что метод, это выполняющий, называется Move — не моя вина.

_>>>А вы чего ожидали? Или это .NET Core на Linux?

S>>Именно этого и ожидал. Нет, это обычный дотнет на Win10.

_>при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?

Я просто ответил, на какой конфигурации это не работает.
Re[5]: Минутка WTF-20: кто тут Буратино?
От: const_volatile  
Дата: 08.04.17 16:14
Оценка: +2
Здравствуйте, samius, Вы писали:

_>>>>Нельзя переместить директорию саму в себя.

S>>>Почему же? Где об этом написано?
_>>как ты себе это представляешь? т.е. вот есть сумка, как полжить её в саму себя?
S>Нормально представляю. Жаль, что не все такое могут себе представить.
S>Я не прошу сумку положить в себя.

но метод Directory.Move делает именно это. "Moves a file or a directory and its contents to a new location."

S>Я прошу дать ей новое символическое имя.


тогда это называется либо hard link (directory junction в win32), либо symbolic link. и насколько я знаю в дотнете этого можно добиться только через p/invoke.

S>В том что метод, это выполняющий, называется Move — не моя вина.


твоя вина вина в том, что ты не понимаешь разницы между уровнями операционной системы, фреймворка, и приложения и мешаешь всё в одну кучу.

S>>>Именно этого и ожидал. Нет, это обычный дотнет на Win10.

_>>при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?
S>Я просто ответил, на какой конфигурации это не работает.

ну и? причём тут дотнет, если это os не позволяет так делать? ты можешь то же самое написать на c++ или питоне, с тем же результатом.
Re[6]: Минутка WTF-20: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.04.17 16:26
Оценка:
Здравствуйте, const_volatile, Вы писали:

_>Здравствуйте, samius, Вы писали:


S>>Я не прошу сумку положить в себя.


_>но метод Directory.Move делает именно это. "Moves a file or a directory and its contents to a new location."

Считай что я прошу передвинуть папку в новое место, чье имя оканчивается большими буквами. В чем проблема?

S>>Я прошу дать ей новое символическое имя.


_>тогда это называется либо hard link (directory junction в win32), либо symbolic link. и насколько я знаю в дотнете этого можно добиться только через p/invoke.

Символическое здесь буквально — состоящее из символов.

S>>В том что метод, это выполняющий, называется Move — не моя вина.


_>твоя вина вина в том, что ты не понимаешь разницы между уровнями операционной системы, фреймворка, и приложения и мешаешь всё в одну кучу.

Возможно. Если это твой ответ, то давай на нем остановимся?

S>>Я просто ответил, на какой конфигурации это не работает.


_>ну и? причём тут дотнет, если это os не позволяет так делать? ты можешь то же самое написать на c++ или питоне, с тем же результатом.

Ты уверен что ос не позволяет так делать и что на C++ и WinAPI будет тот же результат?
Re[4]: Минутка WTF-20: кто тут Буратино?
От: TK Лес кывт.рф
Дата: 08.04.17 16:27
Оценка: +1
Здравствуйте, const_volatile, Вы писали:

_>>>Нельзя переместить директорию саму в себя.

S>>Почему же? Где об этом написано?

_>как ты себе это представляешь? т.е. вот есть сумка, как полжить её в саму себя?


Представьте себе это так, что перемещается не сумка, а её проекция на пространство возможных представлений.

_>>>А вы чего ожидали? Или это .NET Core на Linux?

S>>Именно этого и ожидал. Нет, это обычный дотнет на Win10.

_>при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?


В случае с директорией виноват именно .net — у winapi нет никаких проблем изменением капитализации имен существующих файлов.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Минутка WTF-20: кто тут Буратино?
От: TK Лес кывт.рф
Дата: 08.04.17 16:36
Оценка:
Здравствуйте, const_volatile, Вы писали:

_>>>при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?

S>>Я просто ответил, на какой конфигурации это не работает.

_>ну и? причём тут дотнет, если это os не позволяет так делать? ты можешь то же самое написать на c++ или питоне, с тем же результатом.


Детский сад. cmd.exe => mkdir \\?\C:\COM1 и наслаждаетесь папкой с именем COM1 в корне диска С
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[7]: Минутка WTF-20: кто тут Буратино?
От: const_volatile  
Дата: 08.04.17 17:08
Оценка:
Здравствуйте, TK, Вы писали:

_>>>>при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?

S>>>Я просто ответил, на какой конфигурации это не работает.
_>>ну и? причём тут дотнет, если это os не позволяет так делать? ты можешь то же самое написать на c++ или питоне, с тем же результатом.
TK>Детский сад. cmd.exe => mkdir \\?\C:\COM1 и наслаждаетесь папкой с именем COM1 в корне диска С

наводящий вопрос: начинать имя с "\\?\" — это требование дотнета?
Re[8]: Минутка WTF-20: кто тут Буратино?
От: TK Лес кывт.рф
Дата: 08.04.17 17:33
Оценка:
Здравствуйте, const_volatile, Вы писали:

TK>>Детский сад. cmd.exe => mkdir \\?\C:\COM1 и наслаждаетесь папкой с именем COM1 в корне диска С

_>наводящий вопрос: начинать имя с "\\?\" — это требование дотнета?

Вы файл то хотели создать в каком-то конкретном месте или в сферическом вакууме? Так в сферическом вакууме и TMP создать нельзя — полный путь, так или иначе, надо указывать в любом случае.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[9]: Минутка WTF-20: кто тут Буратино?
От: const_volatile  
Дата: 08.04.17 18:31
Оценка:
Здравствуйте, TK, Вы писали:

TK>>>Детский сад. cmd.exe => mkdir \\?\C:\COM1 и наслаждаетесь папкой с именем COM1 в корне диска С

_>>наводящий вопрос: начинать имя с "\\?\" — это требование дотнета?
TK>Вы файл то хотели создать в каком-то конкретном месте или в сферическом вакууме?

напомню, в квоте, которую ты потёр, был мой вопрос — "причём тут дотнет?". он до сих пор в силе.

TK>Так в сферическом вакууме и TMP создать нельзя — полный путь, так или иначе, надо указывать в любом случае.


т.е. CreateDirectory ("tmp", NULL) вернёт ошибку? это в детском саде такому учат?
Re[10]: Минутка WTF-20: кто тут Буратино?
От: TK Лес кывт.рф
Дата: 08.04.17 19:40
Оценка: +1
Здравствуйте, const_volatile, Вы писали:

_>напомню, в квоте, которую ты потёр, был мой вопрос — "причём тут дотнет?". он до сих пор в силе.


Невозможность создать/переименовать файл это проблемы .net — он тут при всем

TK>>Так в сферическом вакууме и TMP создать нельзя — полный путь, так или иначе, надо указывать в любом случае.


_>т.е. CreateDirectory ("tmp", NULL) вернёт ошибку? это в детском саде такому учат?


не гадить где по пало? во многих учат финальный путь то какой будет? или до таких мелочей не опускаетесь?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[11]: Минутка WTF-20: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.04.17 19:56
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, const_volatile, Вы писали:


_>>напомню, в квоте, которую ты потёр, был мой вопрос — "причём тут дотнет?". он до сих пор в силе.


TK>Невозможность создать/переименовать файл это проблемы .net — он тут при всем


Конкретно с файлом подобный трюк через дотнет работает без проблем. Т.е. File.Move(string, string) позволяет менять в имени только лишь регистр.
Re: Минутка WTF-20: кто тут Буратино?
От: Sinatr Германия  
Дата: 10.04.17 08:57
Оценка:
Здравствуйте, samius, Вы писали:

Оно?

  Ынц
Было бы хорошо в спойлер засовывать ответ...
  Ынц
а то пришлось весь флейм перечитать пока дошло.
---
ПроГLамеры объединяйтесь..
Re[2]: Минутка WTF-20: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.04.17 09:17
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>Оно?

Да, все признаки. Но я не списывал, если речь об этом.

S>Было бы хорошо в спойлер засовывать ответ...

Хотелось бы его выяснить сначала. А то мне кажется что козлит дотнет. А выше было мнение что виноват я.
Re: Минутка WTF-20: кто тут Буратино?
От: Mr.Delphist  
Дата: 10.04.17 10:23
Оценка: +1
Здравствуйте, samius, Вы писали:

Если память не изменяет, то Проводник Win9x имел ту же проблему: если хочешь изменить char case папки, то сначала надо было изменить имя на другое, и только затем переименовывать обратно, но уже с нужным char case.
Re[3]: Минутка WTF-20: кто тут Буратино?
От: Sinatr Германия  
Дата: 10.04.17 10:40
Оценка:
Здравствуйте, samius, Вы писали:

S>>Оно?

S>Да, все признаки. Но я не списывал, если речь об этом.

Речь о решении проблемы. Переименуйте папку сначала в "старое имя"+"123", а уже потом все получится.

S>>Было бы хорошо в спойлер засовывать ответ...

S>Хотелось бы его выяснить сначала. А то мне кажется что козлит дотнет. А выше было мнение что виноват я.

Было высказано предположение (см. ту же ссылку), что это WinAPI. Хотите найти виноватого (хотя важно ли это?) — проверьте.
---
ПроГLамеры объединяйтесь..
Re[4]: Минутка WTF-20: кто тут Буратино?
От: Sharov Россия  
Дата: 10.04.17 10:44
Оценка:
Здравствуйте, const_volatile, Вы писали:

_>при чём тут дотнет вообще? если ты не можешь создать файл с именем "COM1" — это тоже дотнет виноват?


Господа, стыд мне, но я не знаю, что за история стоит за невозможность создать папку COM1 на диске с. Не просветите?

УПД. Нашел, благодарю:

Попробуйте, создать в проводнике папку или файл с именем "СОМ1", сделать это не получится. ОС Windows зарезервировала имена от СОМ1 до СОМ9 для работы с СОМ-портами.

Кодом людям нужно помогать!
Отредактировано 10.04.2017 16:04 Sharov . Предыдущая версия .
Re[2]: Минутка WTF-20: кто тут Буратино?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 10.04.17 11:36
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Здравствуйте, samius, Вы писали:


MD>Если память не изменяет, то Проводник Win9x имел ту же проблему: если хочешь изменить char case папки, то сначала надо было изменить имя на другое, и только затем переименовывать обратно, но уже с нужным char case.

Что-то тако когда-то было, но к текущей ситуации вряд ли имеет отношение. Win7 позволяет переименовывать по месту, а что было раньше — нет ни желания, ни возможности проверить.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.