- 1
- 2
- 3
- 4
if (!File.Exists(filePath))
{
throw new FileNotFoundException("File is not a file!", filePath);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
if (!File.Exists(filePath))
{
throw new FileNotFoundException("File is not a file!", filePath);
}
Вот такая вот философия шестилетней давности. Собственное говно :)
abatishchev 26.06.2012 23:04 # −3
anmiles 26.06.2012 23:09 # +2
abatishchev 26.06.2012 23:10 # −3
roman-kashitsyn 27.06.2012 11:34 # +3
vistefan 27.06.2012 13:00 # 0
interested 27.06.2012 13:37 # 0
3.14159265 27.06.2012 17:31 # +5
Если уж и тырить жабу, то в полном объеме.
bormand 27.06.2012 17:42 # +4
abatishchev 27.06.2012 17:47 # 0
почему папка и файл должны иметь общего наследника? Composition over Inheritance же.
bormand 27.06.2012 18:00 # 0
bormand 27.06.2012 18:10 # +1
3.14159265 27.06.2012 18:16 # +2
А вот почему
Они явно не могут в абстракцию и наследование.
http://msdn.microsoft.com/en-us/library/system.io.directory.aspx
>кстати, тогда такой вопрос - а перечисление файлов и папок реализовано отдельными функциями в духе
Сразу отвечая и на твой вопрос.
3.14159265 27.06.2012 18:27 # +2
http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo(v=vs.80).aspx
FileSystemInfo Class
Provides the base class for both FileInfo and DirectoryInfo objects.
bormand 27.06.2012 18:07 # +1
anmiles 27.06.2012 18:14 # −2
bormand 27.06.2012 18:20 # 0
roman-kashitsyn 27.06.2012 18:24 # 0
bormand 27.06.2012 18:35 # 0
anmiles 27.06.2012 18:50 # +1
3.14159265 27.06.2012 14:39 # +1
bormand 27.06.2012 14:48 # 0
http://msdn.microsoft.com/ru-ru/library/system.io.file.exists%28v=vs.90%29.aspx
rat4 27.06.2012 14:56 # 0
bormand 27.06.2012 15:00 # 0
3.14159265 27.06.2012 16:54 # +3
И тогда в этом послании "File is not a file!" вырисовывается некий сакральный смысл.
carsten 27.06.2012 17:11 # +2
anonimb84a2f6fd141 03.10.2013 17:46 # 0
anmiles 03.10.2013 18:53 # 0
anonimb84a2f6fd141 03.10.2013 19:13 # 0
roman-kashitsyn 03.10.2013 19:30 # 0
anonimb84a2f6fd141 03.10.2013 19:45 # 0
roman-kashitsyn 03.10.2013 20:34 # 0
anonimb84a2f6fd141 03.10.2013 20:45 # 0
bormand 03.10.2013 20:53 # 0
Поставить вижуалстудию. Очень быстро, да.
P.S. Отправлял бы на MSDN тогда уж, ибо до него добраться явно проще, чем до IDE.
anonimb84a2f6fd141 03.10.2013 23:18 # 0
>А объект File же может быть папкой, или не?
возникать не должно.
roman-kashitsyn 04.10.2013 07:56 # +2
Ну так ни я, ни борманд, ни π на решётке не пишем
defecate-plusplus 04.10.2013 09:37 # +3
anonimb84a2f6fd141 08.10.2013 17:10 # 0
anmiles 08.10.2013 17:19 # 0
//ОП
3.14159265 08.10.2013 17:35 # 0
>Ну тогда это не говнокод
Ваша логика безупречна.
anonimb84a2f6fd141 08.10.2013 19:42 # 0
wvxvw 28.06.2012 13:22 # 0
bormand 28.06.2012 15:45 # 0
roman-kashitsyn 28.06.2012 16:19 # +1
wvxvw 28.06.2012 17:18 # +1
А на счет Сишарпа - искать лень, но если уж Виста и более новые поддерживают симлинки, я думаю, они бы чего-нибудь в СДК добавили для их определения. Как жеж программы писать тогда?]
Ха, нашел быстрее чем думал, через p-invoke... мда...
anmiles 28.06.2012 18:50 # +2
3.14159265 30.06.2012 18:45 # +1
У нас есть since 1.2 канонiчные методы.
3.14159265 30.06.2012 18:43 # +1
Ну почему это? Как раз наследование тут вполне подходит:
делаем нового наследника от класса File - типа SymLinkFile. И всё.
Внутри пишем нужную логику, но внешне это тот же File.
wvxvw 30.06.2012 19:33 # 0
3.14159265 30.06.2012 19:49 # 0
>public File getCanonicalFile()
>Equivalent to new File(this.getCanonicalPath()).
>The canonical pathname string denoting the same file or directory as this abstract pathname
Если прочитать другой мой пост http://govnokod.ru/11307#comment144600, то напрашивается ответ:
new File(this.getCanonicalPath())
+
isDirectory()
=
file.getCanonicalFile().isDirectory()
wvxvw 30.06.2012 22:17 # 0
3.14159265 02.07.2012 16:28 # +1
Объясняю:
File можно наследовать если хочется
>делаем нового наследника от класса File - типа SymLinkFile
и оборачиваем им getCanonicalFile().
А в C#
public sealed class FileInfo : FileSystemInfo
public sealed class DirectoryInfo : FileSystemInfo
wvxvw 02.07.2012 21:38 # 0
3.14159265 04.07.2012 21:44 # 0
Если хочется то в яве _можно_ сделать наследника от File.
И тогда new SymLinkFile(path) будет прозрачно отсылать нас к файлу или папке вместо path, который является ссылкой. Внешне же это будет наш File.
>То, что вы демонстритуете не имеет отношения
Это я указываю способ на то как это можно осуществить.
wvxvw 04.07.2012 22:10 # 0
3.14159265 05.07.2012 14:10 # 0
Вот еще раз, повторюсь
>public sealed class FileInfo : FileSystemInfo
wvxvw 05.07.2012 14:21 # −1
Есть цепочка наследования:
Directory <- File
Пытаемся добавить симлинк:
SymLink <- File
Теперь SymLink не может быть Directory потому, что уже наследует File.
Исправляем:
SymLink <- Directory <- File
но, естественно, не все симлинки являются директориями.
Исправляем:
SymLinkDirectory <- SymLink <- AbstractFile
Directory <- File <- AbstracFile
Все равно, типы SymLinkDirectory и Directory не совместимы.
и т.д.
Т.е. нету и в принципе не может быть ситуации в системе не поддерживающей множественное наследование, где возможно реализовать отношение между файлами директориями и симлинками, которое наблюдается в жизни.
А то, что это можно сделать кучей других способов - как бы и так понятно.
3.14159265 05.07.2012 14:28 # 0
А что в ОП посте?
А о чем мы вообще говорили изначально?
>ну да не важно в данном случае.
Очень важно. Речь шла о нем.
>в системе не поддерживающей множественное наследование
Может. Интерфейсы вы еще не проходили.
К тому же я привел пример.
wvxvw 05.07.2012 14:33 # 0
Мой пост про Яву и Наследование. Про C# и наследование я не говорил.
Интерфейсы - не наследование. Интерфейсы, это другой способ решить задачу.
3.14159265 05.07.2012 14:51 # +2
Не хочется думать и внимательно читать чужие посты.
>Мой пост про Яву и Наследование.
Я привел пример на Яве и Наследованием. И даже _без интерфейсов_
>SymLink <- Directory <- File
Бгг :D
Гениальная находка в области проектирования - наследовать симлинк от папки.
>не все симлинки являются директориями.
Симлинки ВООБЩЕ не являются директориями.
wvxvw 05.07.2012 15:39 # 0
И без наследования, просто с вызовом какого-то метода - таких способов миллион, речь про наследование, а не про то как можно решить проблему без него.
Симлинки могут указывать на директории, этого достаточно для того, чтобы расценивать их как директории, для того такая возможность и существует. Если вас это чем-то не устраивает - то, например, разработчиков графического интерфейса всяких проводников по файловой системе такой подход вполне устраивал. Он так же устраивает другие языки (тот же bash и eLisp, например):
roman-kashitsyn 05.07.2012 14:33 # +2
Потому SymLink <: File очень даже подходит. В конце концов, symlink - это просто файл, в котором хранится путь + флажок в inode.
wvxvw 05.07.2012 14:43 # 0
Следуя вашему описаний симлинка - директория - тоже файл, и тут мы возвращаемся к проблеме типов, что и директория - файл и симлинк файл, но бывают симлинки, которые нужно расценивать как директории, а бывают такие, что нет - и тут наследование не помогает, потому что кто-то решил, что множественное наследование "не нужно" и придумал множество обходных путей как бороться с отсутсвием множественного наследования. Но это конечно замечательно, потому что - нет объяснения, просто так, потому что думать не хочется.
3.14159265 30.06.2012 18:49 # 0
к уже существующим:
http://govnokod.ru/11307#comment144618