Замена <Embedded> на... <Embedded>!!!
|
|
as-master | Дата: Пятница, 19 Сентября 2008, 09:09 | Сообщение # 1 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Есть внедренный файл (или файлы). Из проекта сохраняется некоторый файл настроек или чего-то подобного. И в этом файле, в том числе, нужно сохранить путь к внедренному файлу. Что мы делаем при сохранении? Пишем примерно так: string$='<Embedded>\file.ext' rv=StrToFile(и т.д.) В итоге в файл что запишется? Правильно, строка вида: C:\Windows\Temp\MMBPlayer\file.ext Но это у меня так, а факт ли, что у кого-то эта строка не выглядит вот так? c:\Documents and Settings\User\Local Settings\Temp\MMBPlayer\file.ext Значит, если открыть на этом компе файлик, сохраненный на моем компе, то путь к файлу не будет найден. Отсюда следует, что в строку надо писать СРАЗУ так: <Embedded>\file.ext Значит, мне нужно найти в строке выражение C:\Windows\Temp\MMBPlayer\ и заменить его на <Embedded>\ Но как из программы узнать, как выглядит это искомое выражение? Точнее, как программа узнает, ЧТО ей надо заменить на <Embedded>\ если не известна временная папка? Что искать в строке? Дурдом... Надеюсь, вопрос вам понятен? Добавлено (19 Сентябрь 2008, 09:09) --------------------------------------------- Кстати, если тупо писать переменную, НА КОТОРУЮ НУЖНО ЗАМЕНИТЬ, как <Embedded>\, то на это выражение не заменится, а заменится опять на абсолютный путь к временной папке. Это понятно. Поэтому заменяющую переменную нужно задавать примерно так: change$='<Emb' + 'edded>' + CHR(92)
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Пятница, 19 Сентября 2008, 10:30 | Сообщение # 2 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Это у тебя очень странная папка temp... у всех она обычно именно в доках и настройках лежит, а не в папке винды. Чтобы определять системные папки и пути к ним, нужно использовать переменные окружения. В ММВ есть макросы, частично решающие проблему, но их в ММВ так много, что ничего толкового из них не слепишь. <windows> <temp> <system>, выбирай на вкус... я бы взял <temp>
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Пятница, 19 Сентября 2008, 11:28 | Сообщение # 3 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (toizy) Это у тебя очень странная папка temp Ничего странного - я в настройках переменных сред винды обе переменные - TMP и TEMP назначил как C:\Windows\Temp\ - и так делаю не один я, а многие системщики так делают. Для чего? А туда лазить проще, и всё г-но собирается в одном месте. Тем более адрес временной папки по умолчанию находится в скрытой папке Local Settings... А на вопрос ты не ответил. Я не могу использовать ни какие макросы пути, кроме <Embedded> - файлы у меня внедрены в проект... Ну да ладно - будем надеяться, что сохраненные файлы не станут переносить с одного компа на другой, а будут использовать на своем компе - тогда путь к временной папке будет оставаться неизменным.
Да пребудет с вами ММВ!
|
|
| |
Alex3A | Дата: Пятница, 19 Сентября 2008, 12:23 | Сообщение # 4 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Ну для таких делов имеються слеши и прочие хитрости, к примеру что бы строка не обрабатывалась, немного испортим ее <Em_bedded> , а затем если надо обработать починим.
|
|
| |
toizy | Дата: Пятница, 19 Сентября 2008, 15:23 | Сообщение # 5 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Alex3A, кажецо, у него другая проблема. Добавлено (19 Сентябрь 2008, 15:23) ---------------------------------------------
Quote (as-master) не могу использовать ни какие макросы пути, кроме <Embedded> Ну так кто ж запрещает скопировать нужные файлы из ембеддед в темп? А потом читай темп - есть файл, делай чо надо, нет файла - копируй в темп снова. К слову, задача вырвана из контекста. Исходные данные давай
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Пятница, 19 Сентября 2008, 15:45 | Сообщение # 6 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Исходные данные таковы. В проекте имеются внедренные картинки. Юзер при работе может вставлять их в свой документ, документ потом сохранять. Как ты понимаешь, в ММВ нет непосредственного сохранения документов, поэтому мы делаем это собственными средствами сохраняем в виде отдельных строк тексты, настройки документа всякие, а также сохраняем использованные картинки. Поскольку юзер использовал картинки, внедренные в проект, то при сохранении пути к ним он и сохраняется не как строка, содержащая фразу '<Embedded>', а как строка, содержащая КОНКРЕТНЫЙ АБСОЛЮТНЫЙ путь. А поскольку, как я заметил выше, путь этот может оказаться разным на разных компах, то при открытии сохраненного документа на другом компе картинки могут быть не найдены.
Да пребудет с вами ММВ!
|
|
| |
Alex3A | Дата: Пятница, 19 Сентября 2008, 18:37 | Сообщение # 7 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Quote (as-master) В проекте имеются внедренные картинки. После закрытия проекта их там не будет! Но никто не мешает скопировать их куда нибудь, пока проект работает. Quote (as-master) на другом компе картинки могут быть не найдены. Копируй из <Embedded>' в срцдир, к юзеровому проекту, там не потеряються на любом компе.
|
|
| |
as-master | Дата: Пятница, 19 Сентября 2008, 21:49 | Сообщение # 8 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (Alex3A) После закрытия проекта их там не будет! Алекс, неужели ты думаешь, что я об этом не знаю? Если бы мне можно было копировать - я бы так и сделал. А точнее - я бы тогда СРАЗУ положил их в СурсДир. Картинки там и не нужны, когда проект не работает. А когда он запущен, то картинки становятся на месте. Речь идет вовсе не об этом: в документе сохраняется лишь путь к картинке, этот <Embedded>, но сохраняется он в виде конкретного пути, который может оказаться другим на другом компе..... Вот о чем речь.
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Суббота, 20 Сентября 2008, 03:01 | Сообщение # 9 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) Что мы делаем при сохранении? Пишем примерно так: string$='<Embedded>\file.ext' rv=StrToFile(и т.д.) Можно так: string$='<'+'Embedded>\file.ext' rv=StrToFile(и т.д.)
|
|
| |
as-master | Дата: Суббота, 20 Сентября 2008, 10:32 | Сообщение # 10 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Вот, уже дельный ответ! Но конкретно так не получится, объясню, почему. Я ведь заранее не знаю, будет ли в сохраняемом файле использоваться внедренная картинка, либо юзер использует внешнюю картинку на своем компе. В случае, если при открытии файла не будет найдена картинка, лежавшая на компе юзера, программа просто напишет ему, что картинка вероятно была перемещена или удалена. Но в случае, если картинка использовалась внутренняя, из проекта, она не должна быть не найдена!!! А поскольку я заранее не знаю, что за путь будет к сохраняемой картинке, то и не могу использовать предложенную тобой запись в чистом виде. Может быть, тогда как-то вот так (здесь path$ - известный программе но неизвестный нам путь к файлу): file$=ExtractName(path$) + ExtractExt(path$) checkpath$='<Embedded>\' + file$ If (checkpath$=path$) Then string$='<'+'Embedded>\' + file$ Else string$=path$ rv=StrToFile(и т.д.)
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Суббота, 20 Сентября 2008, 11:33 | Сообщение # 11 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) Может быть, тогда как-то вот так (здесь path$ - известный программе но неизвестный нам путь к файлу): file$=ExtractName(path$) + ExtractExt(path$) checkpath$='<Embedded>\' + file$ If (checkpath$=path$) Then string$='<'+'Embedded>\' + file$ Else string$=path$ rv=StrToFile(и т.д.) Именно так. Можно даже немного короче: file$=ExtractName(path$)+ExtractExt(path$) If (path$=<Embedded>+file$) Then sting$='<'+'Embedded>\\'+file$ Else sting$=path$ End rv=StrToFile(и т.д.)
Сообщение отредактировал Rush - Суббота, 20 Сентября 2008, 11:34 |
|
| |
as-master | Дата: Суббота, 20 Сентября 2008, 23:13 | Сообщение # 12 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Гуд! Тему можно считать закрытой.
Да пребудет с вами ММВ!
|
|
| |