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

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

29.01.2012, 20:26. Показов 10594. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru