Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> путь к файлу, путь к файлу 
V
    Опции темы
larinva
Дата 14.10.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



Всем привет! подскажите какой функцией пользоваться чтобы не указывать явный путь к файлу пример (LoadFromFile(c:\12\nm.txt)) а то если изменищь директорю придется вносить изменение и в программе
PM MAIL   Вверх
Keeper89
Дата 14.10.2009, 23:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Если nm.txt лежит в папке с программой. можно использовать
Код

LoadFromFile(ExtractFilePath(Application.ExeName) + 'nm.txt')



--------------------
PM MAIL WWW   Вверх
Данкинг
Дата 14.10.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Если ты перемещаешь файл, то программе так и так нужно каким-то образом дать знать об этом. К примеру, создать файл конфигурации для хранения списка путей к файлам, и в этом списке уже изменять пути. 
Ну, конечно, ещё можно предусмотреть в программе какой-нибудь поиск файла. Но это, сам понимаешь, каково будет по скорости - искать новый каталог файла по всему винту. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 15.10.2009, 09:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Советую не делать так. А реализовать работу с файлами, как это сделано во многих нормальных программах - работа с файлами в папке Мои документы или лучше в папке "C:\Documents and Settings\имя_пользователя\Application Data", в противном случае винда может не дать программе доступ к файлу, особенно если программа будет установлена в папке Program files. Всё равно когда-нибудь прийдётся переделывать, не сегодня, так через год. Так почему бы сразу не реализовать правильно?
PM MAIL   Вверх
larinva
Дата 15.10.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 24.7.2006

Репутация: нет
Всего: 1



Всем сп-бо направление понял тема может быть закрыта! smile 
PM MAIL   Вверх
malor
  Дата 11.11.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Цитата(Akella @  15.10.2009,  09:23 Найти цитируемый пост)
А реализовать работу с файлами, как это сделано во многих нормальных программах - работа с файлами в папке Мои документы или лучше в папке "C:\Documents and Settings\Имя_пользователя\Application Data"

Какая переменная окружения соответствует папке "Мои документы" ?
PM MAIL   Вверх
northener
Дата 11.11.2011, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Советую использовать функцию SHGetSpecialFolderPath с параметром CSIDL_MYDOCUMENTS


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CodeMonkey
Дата 11.11.2011, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Подгоню ссылочку: http://www.gunsmoker.ru/2011/09/blog-post_11.html (код в конце).


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
northener
Дата 11.11.2011, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(CodeMonkey @  11.11.2011,  22:34 Найти цитируемый пост)
Подгоню ссылочку

Хм. Эту статью я ещё не видел.
И "FOLDERID" меня заинтересовал. У вас, Александр всегда под рукой ссылки. Не могли бы вы подкинуть сюда ещё и ссылку на статью или что-либо другое, что объяснит чем "старый"вызов ShGet(Special)Folderxxx может обломаться на Vista+.
Есть у меня и "особый/шкурный" интерес. smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CodeMonkey
Дата 11.11.2011, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Он должен нормально работать, ИМХО. Но пути к новым папкам через него не получить - нет констант.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
northener
Дата 12.11.2011, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(CodeMonkey @  11.11.2011,  23:51 Найти цитируемый пост)
Но пути к новым папкам через него не получить - нет констант.

А какие "новые" папки имеются в виду?
Или это "задел" на "новые разработки"?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Lols
Дата 12.11.2011, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 21.10.2011

Репутация: нет
Всего: нет



Цитата(CodeMonkey @ 11.11.2011,  23:51)
Он должен нормально работать, ИМХО. Но пути к новым папкам через него не получить - нет констант.

Ну, это тогда просто нужно будет учесть и все - не смертельно. Или я не права?
PM MAIL   Вверх
CodeMonkey
Дата 12.11.2011, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(northener @  12.11.2011,  01:21 Найти цитируемый пост)
А какие "новые" папки имеются в виду?


Физические папки: FOLDERID_Contacts, FOLDERID_DeviceMetadataStore, FOLDERID_DocumentsLibrary, FOLDERID_Downloads, FOLDERID_GameTasks, FOLDERID_ImplicitAppShortcuts, FOLDERID_Libraries, FOLDERID_Links, FOLDERID_LocalAppDataLow, FOLDERID_MusicLibrary, FOLDERID_PhotoAlbums, FOLDERID_PicturesLibrary, FOLDERID_Playlists, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommonX64, FOLDERID_Public, FOLDERID_PublicDownloads, FOLDERID_PublicGameTasks, FOLDERID_PublicLibraries, FOLDERID_PublicRingtones, FOLDERID_QuickLaunch, FOLDERID_RecordedTVLibrary, FOLDERID_Ringtones, FOLDERID_SampleMusic, FOLDERID_SamplePictures, FOLDERID_SamplePlaylists, FOLDERID_SampleVideos, FOLDERID_SavedGames, FOLDERID_SavedSearches, FOLDERID_SidebarDefaultParts, FOLDERID_SidebarParts, FOLDERID_UserPinned, FOLDERID_UserProfiles, FOLDERID_UserProgramFiles, FOLDERID_UserProgramFilesCommon, FOLDERID_VideosLibrary

Виртуальные папки: FOLDERID_AddNewPrograms, FOLDERID_AppUpdates, FOLDERID_ChangeRemovePrograms, FOLDERID_ConflictFolder, FOLDERID_Games, FOLDERID_HomeGroup, FOLDERID_OriginalImages, FOLDERID_SEARCH_CSC, FOLDERID_SEARCH_MAPI, FOLDERID_SearchHome, FOLDERID_SyncManagerFolder, FOLDERID_SyncResultsFolder, FOLDERID_SyncSetupFolder, FOLDERID_UsersFiles, FOLDERID_UsersLibraries

Я выделил жирным интересные (на мой взгляд) папки.

Цитата(Lols @  12.11.2011,  03:49 Найти цитируемый пост)
Ну, это тогда просто нужно будет учесть и все - не смертельно. Или я не права? 


Разумеется.

Хотя, смотря как "учитывать". К примеру, папка для сейвов игр. В XP мы можем учесть её отсутствие и писать в AppData - окей. Но если ровно же этот код мы будем использовать и в Vista+, то получится, что мы его пишем не туда - вот тебе и "учли".

Добавлено через 6 минут и 25 секунд
Итого: если в программе мы хотим работать только с папками, которые входят в CSIDL, то использовать ShGet(Special)FolderXXX - это окей. Это будет работать и работать корректно. Никаких проблем тут нет, обратная совместимость - конёк Microsoft. Да, можно проверять версию системы и использовать функции ShGetKnownFolderXXX на Vista+. Но вы от этого ничего не выиграете, а даже скорее наоборот - теперь в вашем коде две ветки (и в два раза больше кода).

Но если нам надо получать хотя бы одну новую папку (из Vista+), то (ИМХО) лучше использовать ShGet(Special)FolderXXX-функции на XP и ниже, и ShGetKnownFolderXXX - на Vista и выше. Чисто по соображениям единообразия.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
northener
Дата 12.11.2011, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(CodeMonkey @  12.11.2011,  03:13 Найти цитируемый пост)
Я выделил жирным интересные (на мой взгляд) папки.

Ну мне  это "не интересно".
Ну а в целом, спасибо!


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Akella
Дата 12.11.2011, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(malor @  11.11.2011,  15:51 Найти цитируемый пост)
Какая переменная окружения соответствует папке "Мои документы" ? 


Код

 with TRegistry.Create do
   try
     RootKey := HKEY_CURRENT_USER;
     OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', false);
     sMyDocAppPath := IncludeTrailingPathDelimiter(ReadString('Personal'));
   finally
     CloseKey;
     free;
   end;


PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.