Два несуществующих файла
От: B0FEE664  
Дата: 26.09.25 17:11
Оценка: :)
Вот если мы сравниваем два нулевых указателя, то получаем true.
А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
И каждый день — без права на ошибку...
Re: Два несуществующих файла
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 26.09.25 18:45
Оценка: +1 :)
Здравствуйте, B0FEE664, Вы писали:

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?


Наверное, должно как-то зависеть от степени чистоты вакуума.
Re: Два несуществующих файла
От: Osaka  
Дата: 26.09.25 20:09
Оценка:
BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
У несуществующих файлов есть id, Name, или Hash?
Существование файла — это bool, int, или string[]?
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Отредактировано 26.09.2025 20:11 Osaka . Предыдущая версия .
Re[2]: Два несуществующих файла
От: B0FEE664  
Дата: 26.09.25 22:37
Оценка:
Здравствуйте, Osaka, Вы писали:

BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

O>У несуществующих файлов есть id, Name, или Hash?
Есть Name. Возможно даже два.

O>Существование файла — это bool, int, или string[]?

А как надо?
И каждый день — без права на ошибку...
Re[2]: Два несуществующих файла
От: B0FEE664  
Дата: 26.09.25 22:46
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

ЕМ>Наверное, должно как-то зависеть от степени чистоты вакуума.

Да ладно! Философия или где?
Вот функция: bool AreEqualFiles(string strFilename1, string strFilename2); что должна возвращать?
И каждый день — без права на ошибку...
Re: Два несуществующих файла
От: GarryIV  
Дата: 27.09.25 07:01
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

ну допустим файл это не что иное как file descriptor
несуществующий файл это ENOENT
сравнение двух ENOENT даст true
WBR, Igor Evgrafov
Отредактировано 27.09.2025 7:07 GarryIV . Предыдущая версия .
Re[3]: Два несуществующих файла
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 27.09.25 07:16
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот функция: bool AreEqualFiles(string strFilename1, string strFilename2); что должна возвращать?


Если она не умеет в исключения, то долг за те проблемы, которые может породить.
Re[3]: Два несуществующих файла
От: hi_octane Беларусь  
Дата: 27.09.25 07:46
Оценка: +1
BFE>Да ладно! Философия или где?
BFE>Вот функция: bool AreEqualFiles(string strFilename1, string strFilename2); что должна возвращать?

Ну я бы кидал исключение "FileNotFound", потому что это сделает fail early легиону багов "ой, у нас тут путь потерялся", "ой, расширение не добавили", "ой на Linux case matters", и т.д.

Если принципиально хочется выпендриться, и функция в каком-то довольно универсальном API, то, в случае когда обоих нет, можно сравнить имена. Имена равны => true, потому что это один и тот же файл и он стопудово будет равен самому себе, когда только появится. Имена разные разные => false, по логике того же double NaN.

Но глобально, прежде чем выпендриваться, надо тогда подумать про пользователя этой функции. Если это API для каких-нибудь разных стратегий кэширования, которые открывают файлы исплючительно через OpenOrCreateNew, то для несуществующих файлов вообще можно возвращать всегда true. Потому что с точки зрения такого пользователя существуют абсолютно все файлы, просто часть из них пустые. А если клиент не такой экзотический, то всё-таки исключение однозначно лучше, кмк.
Re: Два несуществующих файла
От: kov_serg Россия  
Дата: 27.09.25 08:56
Оценка: +2
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

Функция сравнения должна возвращать < > или =
А у вас функция проверки идентичности.
И должна она возвращать Identical если одинаковые, Different если разные и NoResult если по каким-то причинам пока невозможно их сравнить
Re: Два несуществующих файла
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 27.09.25 09:43
Оценка: +3
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

Не стоит в один ряд помещать сишные указатели и файлы. Более того, в некоторых языках два nul-указателя/ссылки на объекты не будут равны, на nul надо проверять использованием какого-нибудь isNul()
Маньяк Робокряк колесит по городу
Re[3]: Два несуществующих файла
От: Osaka  
Дата: 27.09.25 09:55
Оценка:
O>>Существование файла — это bool, int, или string[]?
BFE>А как надо?
Очевидно, если файл должен существовать в нескольких местах, а существует во всех/некоторых/ни в одном, — это разные степени не-существования.
А какая точность нужна в конкретном случае — для этого нужно знать предметную область.
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Re: Два несуществующих файла
От: LaptevVV Россия  
Дата: 27.09.25 16:31
Оценка: +2
BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.
BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
Если аналогия с указателями, то эти файлы существуют, но пустые.
Должно давать true
Размер одинаковый (ноль), а содержания нет ни одного байта.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Два несуществующих файла
От: Doom100500 Израиль  
Дата: 28.09.25 06:32
Оценка: +2
Здравствуйте, LaptevVV, Вы писали:

BFE>>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
LVV>Если аналогия с указателями, то эти файлы существуют, но пустые.
LVV>Должно давать true
LVV>Размер одинаковый (ноль), а содержания нет ни одного байта.

Файл с нулевым размером может существовать, а может не существовать. Два таких файла идентичны?
Спасибо за внимание
Re: Два несуществующих файла
От: rg45 СССР  
Дата: 28.09.25 08:36
Оценка: +3
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

Имхо, эта аналогия не совсем корректна. Значения указетелей нулевые, но сами указатели, всё-таки, существуют как объекты. И более корректной аналогией сравнения нулевых указателей было бы сравнение двух пустых файлов.

Семантика же операции сравнения несуществующих файлов, я думаю, будет определяться спецификой задачи верхнего уровня, в рамках которой потребность в таком сравнении возникла. Операция странная, как по мне, и общего правила я тут не вижу. Короче, как сам решишь, так и будет.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 28.09.2025 9:18 rg45 . Предыдущая версия . Еще …
Отредактировано 28.09.2025 8:39 rg45 . Предыдущая версия .
Re[3]: Два несуществующих файла
От: LaptevVV Россия  
Дата: 28.09.25 09:38
Оценка:
BFE>>>Вот если мы сравниваем два нулевых указателя, то получаем true.
BFE>>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
LVV>>Если аналогия с указателями, то эти файлы существуют, но пустые.
LVV>>Должно давать true
LVV>>Размер одинаковый (ноль), а содержания нет ни одного байта.
D>Файл с нулевым размером может существовать, а может не существовать. Два таких файла идентичны?
А как ты несуществующий файл свяжешь с объектом в программе ?
Ты ж не с самим файлами работаешь, а с объектами программы.
Или filesystem это позволяет ? Я просто не пользовался.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Два несуществующих файла
От: Doom100500 Израиль  
Дата: 28.09.25 12:39
Оценка:
Здравствуйте, LaptevVV, Вы писали:

BFE>>>>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>>>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
LVV>>>Если аналогия с указателями, то эти файлы существуют, но пустые.
LVV>>>Должно давать true
LVV>>>Размер одинаковый (ноль), а содержания нет ни одного байта.
D>>Файл с нулевым размером может существовать, а может не существовать. Два таких файла идентичны?
LVV>А как ты несуществующий файл свяжешь с объектом в программе ?
LVV>Ты ж не с самим файлами работаешь, а с объектами программы.
LVV>Или filesystem это позволяет ? Я просто не пользовался.

Просто это одно из условий задачи, сформулированной в изначальном посте. А пост этот в Философии.
Спасибо за внимание
Re[2]: Два несуществующих файла
От: VladFein США  
Дата: 28.09.25 13:47
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

BFE>>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
LVV>Если аналогия с указателями, то эти файлы существуют, но пустые.
LVV>Должно давать true
LVV>Размер одинаковый (ноль), а содержания нет ни одного байта.

А если у одного из файлов имя invalid?
Re[3]: Два несуществующих файла
От: LaptevVV Россия  
Дата: 28.09.25 14:11
Оценка:
BFE>>>Вот если мы сравниваем два нулевых указателя, то получаем true.
BFE>>>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?
LVV>>Если аналогия с указателями, то эти файлы существуют, но пустые.
LVV>>Должно давать true
LVV>>Размер одинаковый (ноль), а содержания нет ни одного байта.

VF>А если у одного из файлов имя invalid?

Тогда пишите новый тип данных, у которого понятие "пустой" содержит не единственное значение.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Два несуществующих файла
От: L_G Россия  
Дата: 28.09.25 14:31
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

Если "написать функцию сравнения двух файлов, на входе — 2 имени, на выходе — boolean" — это уже утвержденное/согласованное ТЗ, а стандартные функции получения длины и содержимого файла по его имени бросают исключения, то и функция сравнения должна пробросить эти исключения выше — программист не должен фантазировать, добавлять что-то в ТЗ от себя, да еще и писать лишний код. Об этом же и принцип YAGNI.

Если используемые стандартные файловые функции выдают информацию об ошибках доступа/несуществования файлов/папок как-то иначе — было бы логично следовать их принципу (наша функция вроде бы тоже "файловая") и передавать эту инфу выше (только если это не противоречит ТЗ).

Конечно, если есть возможность уточнить ТЗ — лучше это сделать.

Если эту задачу поставил себе сам программист — кому как не ему лучше знать ответ. Но в общем случае опять же YAGNI рулит.
Каша в голове — пища для ума (с)
Отредактировано 28.09.2025 18:19 L_G . Предыдущая версия .
Re: Два несуществующих файла
От: Teolog  
Дата: 28.09.25 17:59
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Вот если мы сравниваем два нулевых указателя, то получаем true.

BFE>А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?

Зависит исключительно от внутренних правил системы
1 вариант
Файлы обязаны существовать даже с пустым содержимым, отсутсвующий файл — ошибка.
В этом случае сравнение обязано возвращать false — неравно. Это если оно не возвращает исключений.

2 вариант
Пустые файлы в целях оптимизации могут не записываться. Тогда отсутсвующий файл эквивалентен пустому.
В этом случае должно вернуть true.

Более общего ответа не существует
Отредактировано 28.09.2025 18:00 Teolog . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.