Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/56: Рейтинг темы: голосов - 56, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 88

Открытие файла через написанное приложение

29.01.2012, 20:26. Показов 10604. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу программу, которая имеет свой формат файлов на основе xml.
  • Как реализовать открытие таких файлов через "Открыть с помощью.."? Как объяснить это Windows и что нужно написать в коде программы?
  • Как тогда в коде узнать в каком режиме работает программа (то есть была вызвана при открытии файла или просто была открыта)?

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2012, 20:26
Ответы с готовыми решениями:

Приложение, написанное на Дельфи, работает, но закрывается через несколько кликов
кто может помочь? загрузил созданное на дельфи приложение на андроид, работает, но через несколько кликов закрывается. почему?

Не работает ввод имени файла через fget и открытие через fopen
Уже все перепробовал и в гугле пару часов посидел. Но никак не пойму где проблема допустим в этом коде : char filename; char *p; ...

Как добавить изображение в приложение, написанное на WinApi?
здравствуйте! подскажите, как добавить изображение в приложение, написанное на winapi?желательно подробнее. заранее спасибо.

12
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
29.01.2012, 20:56
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

C#
1
System.Diagnostics.Process.Start(@"C:\путь\file.txt");
//или другое расширение
0
0 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 88
29.01.2012, 21:49  [ТС]
sasha0192, честно говоря, не понял Вашего ответа..
0
 Аватар для hotkey
19 / 17 / 5
Регистрация: 06.09.2011
Сообщений: 51
29.01.2012, 21:49
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

ассоциация файлов в реестре делается следующим образом:
чтобы связать тип файла MyFileType с программой C:\Program Files\MyApp\app.exe, нужно
1) в ветви реестра HKEY_CLASSES_ROOT создать раздел "MyFileType" и в нём задать параметр по умолчанию равным ".mft" (.mft - расширение файлов нашего типа)
2) в этой же ветви, HKEY_CLASSES_ROOT, создать раздел ".mft", в нем раздел /shell/open/command, в этом разделе значение по умолчанию должно иметь вид
C:\Program Files\MyApp\app.exe "%p"
сделать это можно с помощью reg-файла или программно (увы, не знаю, как делается в C#)

второй вопрос:
если система открывает какой-либо файл вашей программой, то она передаст программе имя этого файла в качестве параметра. ваше дело - параметр обработать. для этого измените сначала класс вашей основной формы:
C#
1
2
3
4
5
6
7
string[] globalargs; //объявите строковый массив, где будете хранить аргументы
 
public Form1(string[] args) //измените конструктор формы, чтобы она принимала строковый массив в качестве параметра
        {
            InitializeComponent();
             globalargs = args; //и хранила его как массив globalargs
        }
, а затем основную функцию программы (в Program.cs, если ничего не менять) следующим образом
C#
1
2
3
4
5
6
static void Main(string[] args) //добавьте параметр - строковый массив
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(args)); //передайте этот массив в конструктор формы
        }
2
ѪѦѢ
 Аватар для SlavAz
599 / 168 / 5
Регистрация: 19.08.2011
Сообщений: 665
Записей в блоге: 3
29.01.2012, 21:49
Цитата Сообщение от Vilian Посмотреть сообщение
Как реализовать открытие таких файлов через "Открыть с помощью.."? Как объяснить это Windows и что нужно написать в коде программы?
Нужно регистрировать в реестре Windows формат файла. Насколько я знаю.
1
0 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 88
29.01.2012, 22:01  [ТС]
hotkey, спасибо большое за такой обширный ответ. Буду разбираться.
0
 Аватар для hotkey
19 / 17 / 5
Регистрация: 06.09.2011
Сообщений: 51
29.01.2012, 22:15
добавлю по работе с реестром, заодно сам разобрался
C#
1
2
3
4
5
6
7
8
9
using Microsoft.Win32;
//...
RegistryKey rkey;
rkey = Registry.ClassesRoot.CreateSubKey("MyFileType");
    rkey.SetValue("(По умолчанию)",".mft");
    rkey.Close();
rkey = Registry.ClassesRoot.CreateSubKey(".mft/shell/open/command");
    rkey.SetValue("(По умолчанию)","C:\\Program Files\\MyApp\\app.exe \"%p\"");
    rkey.Close();
вместо
C:\\Program Files\\MyApp\\app.exe \"%p\"
можно использовать
C#
1
Application.ExecutablePath;
, если уверены, что программа лежит на своём месте, и её никто никуда не переместит.
так добавляется в реестр ассоциация.
удачи, разбирайтесь
2
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 4
27.08.2014, 18:16
А как запустить режим отладки так, чтобы просмотреть содержимое массива аргументов?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
27.08.2014, 20:07
Цитата Сообщение от RDDare Посмотреть сообщение
А как запустить режим отладки так, чтобы просмотреть содержимое массива аргументов?
F5, F10 или F11 (в зависимости от симпатий и ситуации). Вопрос скорее не в том, как запустить, а в том, как посмотреть. Наводите мышь на свой массив в режиме отладки, а дальше исследуете всевозможные свойства массива, включая многократно вложенные. Где в базовом списке вы это содержимое и сможете увидеть.
0
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 4
27.08.2014, 20:47
Я наверно неправильно вопрос задал. Дело в том что отладка запускается из среды, и запускается она с пустым массивом аргументов. Мне необходимо чтобы отладка происходила с открываемым файлом.

Form1.cs
C#
1
2
3
4
5
6
7
8
9
10
11
    public partial class Form1 : Form
    {
        public Form1(string[] args)
        {
            InitializeComponent();
            globalargs = args;         
        }
 
        string[] globalargs;
 
    }
Program.cs
C#
1
2
3
4
5
6
static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(args));
        }
0
 Аватар для kesean
292 / 291 / 108
Регистрация: 04.09.2010
Сообщений: 638
27.08.2014, 21:26
если есть желание посмотреть, что система передает в качестве параметров, то можно тупо вызвать MessageBox
C#
1
2
3
4
5
6
7
static void Main(string[] args)
        {
            MessageBox.Show(string.Join("\r\n",args));
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(args));
        }
Или в лог писать.
1
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.08.2014, 21:49
Если нужно для проверки что-то сделать, то переходим в свойства проекта, вкладка Debug, поле Command line arguments, вводим аргументы через пробел. Либо оборачиваем в кавычки двойные, если пробел нужно учитывать как часть агрумента.
1
0 / 0 / 0
Регистрация: 27.08.2014
Сообщений: 4
29.08.2014, 13:51
Спасибо большое за ответы, всё заработало!
От себя хочу добавить, что при запуске приложения через открываемый файл, в качестве аргументов передаётся полный путь к этому файлу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2014, 13:51
Помогаю со студенческими работами здесь

Написанное мною приложение управляет другим. Подскажите...
Как можно и можно ли вобще?!! Хочу написать програмку на MFC чтоб она посылала сигналы (вымышленные) о нажатии различных кнопок ...

Можно ли приложение написанное на c++ запустить в flash player?
Можно ли приложение написанное на c++ запустить в flash player?

Открытие файла через OpenFileDIalog и записать имя файла в переменную
Можно ли в формах Pascal ABC Net, открыв файл через openfiledialog, записать в строковую переменную полное имя файла?

Сколько будет стоить приложение написанное для андроида?
Сколько будет стоить простой rss ридер? Для сайта хочу написать просмотр статей видео.

Можно ли как то освободить написанное приложение от наличия фреймворка?
Можно ли как то освободить написанное приложение от наличия фреймворка? Так сказать вставить в готовое приложение не ссылки на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru