Перетащите файл поверх файла .exe, чтобы получить файлinfo
2 Creator84 [2010-07-12 20:46:00]
Как говорится в названии. Я знаю, как это сделать только на С#, но при попытке сделать это с помощью WPF я не могу узнать, где и что добавить, чтобы прочитать имя файла при запуске программы.
public static void Main(string[] args)
{
if (Path.GetExtension(args[0]) == ".avi" || Path.GetExtension(args[0]) == ".mkv")
{
string pathOfFile = Path.GetFileNameWithoutExtension(args[0]);
string fullPathOfFile = Path.GetFullPath(args[0]);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(pathOfFile, fullPathOfFile));
}
else
{
MessageBox.Show("This is not a supported file, please try again..");
}
}
c# wpf fileinfo
6 ответов
3 Creator84 [2010-07-14 09:50:00]
Нашел решение. Спасибо за помощь:)
Я опубликую то, что я сделал, если кому-то еще это нужно.
В App.xaml я добавил Startup="Application_Startup
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.App"
StartupUri="MainWindow.xaml"
Startup="Application_Startup">
<Application.Resources>
<!-- Resources scoped at the Application level should be defined here. -->
</Application.Resources>
</Application>
И в App.xaml.cs я добавил следующие строки:
public static String[] mArgs;
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.Args.Length > 0)
{
mArgs = e.Args;
}
}
В последнее время мне пришлось добавить некоторую информацию в класс MainWindow.
public MainWindow()
{
this.InitializeComponent();
String[] args = App.mArgs;
}
Чтобы получить нужные данные, используйте System.IO.Path
Следите за инструкцией Using. если вы используете только Ex. Path.GetFileNameWithoutExtension
вы получите опорную ошибку. Используйте System.IO.Path
при получении ваших данных.
1 Assaf Lavie [2010-07-12 20:52:00]
Вам нужно найти точку входа (например, событие OnLoad для вашего главного окна), а затем получить доступ к таким аргументам командной строки:
string[] args = Environment.GetCommandLineArgs();
1 3SMS bd [2016-11-06 19:51:00]
Вы можете использовать это для Mediaelement.
public MainWindow()
{
this.InitializeComponent();
doubleclickevent();
}
private void doubleclickevent()
{
string[] args = Environment.GetCommandLineArgs();
string[] arr = new string[]
{
".MP4",
".MKV",
".AVI"
};
foreach (string element in args)
{
foreach (string s in arr)
{
if (element.EndsWith(s))
{
MediaElement.Source = new Uri(@element, UriKind.RelativeOrAbsolute);
MediaElement.LoadedBehavior = MediaState.Play;
}
else { return; }
}
}
}
1 Yavor Georgiev [2016-11-06 17:22:00]
Я знаю, что тема старая, но для тех, кто ищет что-то подобное, может быть полезно. Я пытался добавить эту функцию в свою программу (начиная программу, отбросив файл поверх EXE), и решение было очень простым, и оно исходило отсюда. Моя программа просто возилась с несколькими ячейками в файле Excel. Поэтому было довольно очевидно, что он должен запускаться и делать это, просто отбросив файл excel. Поэтому я добавил это в конструктор формы после инициализации компонента и работает безупречно для меня:
public Form1()
{
InitializeComponent();
string[] args = Environment.GetCommandLineArgs();
filePathTextBox.Text = (args.Length > 1 && (Path.GetExtension(args[1]) == ".xlsx" ||
Path.GetExtension(args[1]) == ".xls")) ? args[1] : "";
}
Я заметил, что первый аргумент в args
- это путь к моей программе, поэтому я тестировал и, по-видимому, второй аргумент - это путь к файлу, который я бросаю на exe, поэтому я использую args[1]
.
Я бы хотел, чтобы меня исправили, если я ошибаюсь, но пока все отлично работает с моей программой.
1 Hans Passant [2010-07-12 21:27:00]
Дважды щелкните файл App.xaml в обозревателе решений. Вы можете добавить событие Startup. Свойство e.Args предоставляет вам доступ к аргументам командной строки.
0 JeremiahDotNet [2013-07-26 19:29:00]
Когда вы перетаскиваете файлы из Windows на EXE, EXE запускается и предоставляет имена файлов в качестве аргументов командной строки.
public MainWindow()
{
string[] args = Environment.GetCommandLineArgs();
foreach (var s in args)
{
//do something with s (the file name)
}
}