как мультиплатформно размещать файлы
Модератор: Модераторы
как мультиплатформно размещать файлы
А куда надо помещать файлы, чтобы по одному имени его нашли и в винде и в линух?
Хочу пояснить,если кто-то думает, что мне поиском лень пользоваться.
Пользовался. Но не смог так сформулировать, чтобы меня правильно поняли.
Я час где-то сидел в яндексе, но нарыл только горы grep и find. Раз пять формулировал, но все то же самое
Хочу пояснить,если кто-то думает, что мне поиском лень пользоваться.
Пользовался. Но не смог так сформулировать, чтобы меня правильно поняли.
Я час где-то сидел в яндексе, но нарыл только горы grep и find. Раз пять формулировал, но все то же самое
Re: как мультиплатформно размещать файлы
Верно - ничего не понятно. Системы с разной архитектурой подхода к вопросу хранения файлов и взаимодействия с человеком. В Win наплевать на регистр названия, в Nix(насколько помню) нет. В остальном там бардак, когда баловался с nix, то понял что документация по linux одно, а каждый дистрибутив немного отличается в плане директорий и правил хранения. В любом случае не зная пути по имени файл ищется в Win в начале рядом с программой, дальше в паре системных папок и все. У nix хз. Смысл искать файл непойми где?
Re: как мультиплатформно размещать файлы
Попробуем конкретизировать - ubuntu
Никак не ожидал, что в линух нет стандартных папок для размещения файлов.
И даже обсуждений нигде не попадалось. Вероятно "в целях борьбы с дырами безопасности".
На борьбу за безопасность любую хрень списать можно
Никак не ожидал, что в линух нет стандартных папок для размещения файлов.
И даже обсуждений нигде не попадалось. Вероятно "в целях борьбы с дырами безопасности".
На борьбу за безопасность любую хрень списать можно
Re: как мультиплатформно размещать файлы
DedFrend писал(а):Попробуем конкретизировать - ubuntu
Никак не ожидал, что в линух нет стандартных папок для размещения файлов.
И даже обсуждений нигде не попадалось. Вероятно "в целях борьбы с дырами безопасности".
На борьбу за безопасность любую хрень списать можно
А можете конкретизировать ещё детальнее, до конкретного сценария использования такого поиска в вашей ситуации?
Что такое "стандартных папок для размещения файлов"? Каких файлов?
Есть переменные окружения и в Linux и в Windows. В частности PATH, которые указывают пути, по которым система ищет исполняемые файлы (команды), вне зависимости от текущей директории вызова.
Есть "домашняя" директория текущего пользователя и там и там HOME/USERPROFILE, в которую текущий пользователь имеет возможность записи любых файлов, под универсальное понимание "стандартной папки" эта переменная как раз больше всего подходит.
Если речь заходит про поиск, как функцию, без привязки к конкретным файлам, то в Windows есть механизм Windows Search, суть которого в индексации файлов по указанным расположениям с возможностью последующего поиска, а также, с помощью фильтров, поиска по содержимому индексированных файлов.
В Linux системы локального поиска тоже есть, например Beagle , Tracker , Recoll
Есть еще поиск без индексации в обеих системах, путем рекурсивного перебора содержимого папок от указанной, как вы выше сказали с помощью find (файлы),grep (содержимое) и т.д.
Это подходы с двух сторон, но только четко понимая решаемую задачу (конкретный сценарий использования), можно что-то рекомендовать.
Последний раз редактировалось delphius 25.02.2023 15:19:48, всего редактировалось 3 раза.
Re: как мультиплатформно размещать файлы
Каюсь и благодарю. Я натурально про PATH забыл. Хотя знал и даже пользовался. Вот переклинило...
Мне не поиск файлов нужен был . Про поиск мне сотни ссылок вывалили. А просто я программе
открываю файл. И чтобы оно работало и в винде и в линукс одинаково надо чтобы
имя было без полного пути. В винде достаточно просто положить рядом с программой.
А где линукс ищет я понять не мог, а про PATH вылетело из головы. Как там эта болезнь называется?...
Мне не поиск файлов нужен был . Про поиск мне сотни ссылок вывалили. А просто я программе
открываю файл. И чтобы оно работало и в винде и в линукс одинаково надо чтобы
имя было без полного пути. В винде достаточно просто положить рядом с программой.
А где линукс ищет я понять не мог, а про PATH вылетело из головы. Как там эта болезнь называется?...
Re: как мультиплатформно размещать файлы
DedFrend писал(а):Как там эта болезнь называется?...
Правильная постановка задачи
Re: как мультиплатформно размещать файлы
delphius писал(а):И чтобы оно работало и в винде и в линукс одинаково надо чтобы
имя было без полного пути.
Я для этого завёл в программе переменную, которая инициализируется как:
Код: Выделить всё
WorkDir:=GetAppConfigDir(False);Под Линуксом она получает значение "/home/UERNAME/.config/APPNAME", под Виндой что-то вроде "c:\Users\USERNAME\AppData\Local\APPNAME" .
Там и храню рабочие файлы.
DedFrend писал(а):В винде достаточно просто положить рядом с программой.
Если текущий пользователь имеет права администратора. Иначе могут быть проблемы с записью.
Re: как мультиплатформно размещать файлы
svk12 писал(а):GetAppConfigDir(False);
А как побороли явные проблемы с возможным русским именем пользователя и/или программы?
Re: как мультиплатформно размещать файлы
DedFrend писал(а):В винде достаточно просто положить рядом с программой
Неправильно. У вас в ярлыке программы вообще то указывается два предмета - путь к исполняемому файлу и folder, который будет являться рабочим при запуске программы. И они могут быть разными. Искать файл программа будет в той папке, которая была для нее текущей при старте.
DedFrend писал(а):А где линукс ищет я понять не мог, а про PATH
он в PATH не ищет файлы, не являющиеся исполняемыми. И более того, текущий каталог не является стартовой точкой обнаружения (это как раз потому надо запускать программу из текущего каталога в терминала как ./progrаm не просто program - потому что во втором случае это будет папка корневого каталога, заданная в системе для пользователя, из под которого производится запуск). Поэтому, хотите читать файл из того же каталога, в котором лежит программа - определите путь до этой программы, присоедините к имени файла и читайте. Но помните, что права доступа в таком случае вам могут давать что-то запустить из папки, но не давать возможности что-то читать из неё.
Re: как мультиплатформно размещать файлы
SSerge накаркал...
Натурально, неисполняемый файл все равно не видит.
Плюнул и имя файла вынес в ini файл. Пусть они будут разные в разных осях.
Но все равно удивляюсь, что за проблемы на ровном месте
Плюнул и имя файла вынес в ini файл. Пусть они будут разные в разных осях.
Но все равно удивляюсь, что за проблемы на ровном месте
Re: как мультиплатформно размещать файлы
delphius писал(а):А как побороли явные проблемы с возможным русским именем пользователя и/или программы?
Виндовая версия работает в организации, админ которой даёт юзерам логины исключительно на латинице.
Когда-то пробовал
Код: Выделить всё
GetAppConfigDirUTF8(False);