Как я узнаю путь файла, инициированного путем открытия файла с пользовательским расширением файла?

Я бы использовал union all так:

select nn.id, nn.name, 'new' as which
from names_new nn
union all
select n.id, n.name, 'old' as which
from names_old n
where not exists (select 1 from names_new nn where nn.id = n.id);

Это сравнивает идентификаторы. Я не уверен, хотите ли вы сравнить идентификаторы или имена (или оба) для определения приоритетов.

7
задан Arthur 19 January 2009 в 23:07
поделиться

2 ответа

При создании ассоциации файлов Вы указали командную строку, которую Проводник должен выполнить для активации программы. Оболочка ставит имя файла документа на командной строке также так в Вашей программе, проверьте параметры командной строки. Как Вы делаете, который зависит от Вашей языковой среды и среды разработки. В Delphi используйте ParamCount и ParamStr функции.

При создании ассоциации файлов можно указать точно, куда на командной строке имя файла документа должно пойти. Использовать %1 где-нибудь на командной строке и оболочке заменит его именем файла. Начиная с имен файлов Windows часто содержит пробелы, необходимо поместить кавычки вокруг имени файла, таким образом, командная строка в ассоциации файлов была бы похожа на это:

ArthurApp.exe "%1"

С той ассоциацией, дважды щелкая по другому файлу документа запустит другой экземпляр Вашей программы. Если Вы предпочли бы открывать документ в другом окне уже рабочего экземпляра, то можно написать код, чтобы заставить программу искать уже рабочие экземпляры, когда это запускает. Если это находит один, то это может общаться с тем экземпляром для сообщения этого что файл открыться. Можно произвести ту коммуникацию любое количество путей, включая почтовые слоты, сокеты, именованные каналы, файлы с отображенной памятью и DDE.

Механизм ассоциации файлов оболочки уже имеет способ связаться через DDE, таким образом, второй экземпляр Вашей программы не был бы запущен вообще. Вместо этого оболочка запустила бы сеанс DDE с уже рабочего экземпляра и сказала бы ему новое имя файла тот путь. Однако DDE, кажется, впадает в немилость в наше время, так проверьте некоторые из других опций сначала.

Для Вашего вопроса о стороне, нет, расширения являются не всегда тремя символами долго. Озирайтесь, и это должно быть очевидно: C код входит в.c файлы, графика Adobe Illustrator входит в .ai файлы, и новые документы Microsoft Word входят в .docx файлы.

Но остерегайтесь. Если Вы попросите **.doc*, то результаты будут включать .docx файлы также. Поэтому FindFirstFile соответствия и короткие имена файлов и длинные имена файлов и длинные имена файлов с долгими расширениями файла имеют расширения с тремя символами в своих версиях короткого имени файла.

14
ответ дан 6 December 2019 в 15:32
поделиться

Ограбьте покрыл ответ на Ваш вопрос (вопросы) красиво.

Относительно последней части, существует ли общедоступный список расширений файла - не как таковым, но существует shell.windows.com, использование Проводника веб-сервиса для определения местоположения обработчиков для неизвестных расширений файла. Можно составить расширение, затем запрашивают shell.windows.com, чтобы видеть, было ли оно зарегистрировано. Например, чтобы проверить, ли расширение .blah был зарегистрирован любым на shell.windows.com, просто откройте этот URL в любом браузере:

http://shell.windows.com/fileassoc/0409/xml/redir.asp?ext=blah

Конечно, замените запаздывание blah с Вашим расширением.

Можно ли найти больше деталей об этом в KB929149 и в сообщении Raymond Chen, Где shell.windows.com получает информацию о расширениях файла, и как я принимаю участие в том действии?.

0
ответ дан 6 December 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: