2014-04-29 1 views
2

У меня есть приложение для форм Windows с настраиваемым расширением файла. Я могу сохранить данные в свой файл, и когда я дважды щелкаю мой сохраненный файл из Windows, он запускает мое приложение.Доступ к данным, сохраненным в пользовательском типе файла в приложении Windows Forms

Я не смог, однако, получить имя файла, на который я щелкнул, чтобы читать его данные. Все, кажется, говорит мне, что args [0] должен быть exe (как я вижу), args [1] будет следующим параметром (возможно, что я ищу, имя файла, на которое я нажал), но args.Length всегда 1, независимо от того, открываю ли я exe напрямую или нажимаю на текстовый файл, который запускает exe, у меня никогда не было имени файла, на который я нажал.

Редактировать (resolved; ish): ОК, наконец, более конкретная проблема прибита. Мое приложение было развернуто с помощью ClickOnce, и я установил все ассоциации файлов через свойства приложений форм Windows. Когда я щелкнул правой кнопкой мыши и просмотрел свойства моего сохраненного пользовательского файла, он говорит: «Открывается с помощью библиотеки поддержки развертывания приложений ClickOnce», а не с моим именем приложения. Если я изменил значение по умолчанию, чтобы открыть его с моим .exe, волшебным образом он имеет правильные значения arg (exe, за которым следует имя файла, на которое я нажал).

+0

Возможный дубликат [Как открыть файл с моим приложением?] (Http://stackoverflow.com/questions/4908955/how-do-i-open-a-file-with-my-application) – Mehraban

+0

Предположительно, вы должны иметь свой путь к файлу в одном из аргументов. У вас есть только имя .exe? – Kilazur

+0

Если ваш сохраненный файл не очень большой, его часто проще использовать [File.ReadAllText()] (http://msdn.microsoft.com/en-us/library/ms143368 (v = vs.110) .aspx) или [File.ReadAllLines()] (http://msdn.microsoft.com/en-us/library/s2tte0y1 (v = vs.110) .aspx), чем использование 'StreamReader'. Кстати, вы должны отредактировать свой вопрос, чтобы у вас не было лишнего пуха. Разбейте его, чтобы просто адекватно объяснить свой вопрос. – mason

ответ

1

Вы не можете напрямую обращаться к аргументам командной строки для приложений ClickOnce. Чтобы добраться до них, я использовал следующее, модифицирован немного от here:

System.Runtime.Hosting.ActivationArguments args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments; 
if (args.ActivationData != null) 
{ 
    foreach (string commandLineFile in AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData) 
    { 
     MessageBox.Show(string.Format("Command Line File: {0}", commandLineFile)); 
    } 
} 

Это дал мне имя файла, я нажал на. Hoorah.

 Смежные вопросы

  • Нет связанных вопросов^_^