Перетащите файл поверх файла .exe, чтобы получить информацию о файле. - PullRequest
3 голосов
/ 12 июля 2010

Как следует из названия. Я знаю, как сделать это только в C #, но при попытке сделать это с 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..");
    }
}

Ответы [ 6 ]

4 голосов
/ 14 июля 2010

Нашел решение.Спасибо за вашу помощь:)

Я опубликую то, что сделал, если кому-то еще это понадобитсяИ в 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;
}

Чтобы получить нужные данные,use System.IO.Path

Не упустите оператор Using.если вы используете только Ex.Path.GetFileNameWithoutExtension вы получите ошибку ссылки.Используйте System.IO.Path при получении данных.

1 голос
/ 06 ноября 2016

Вы можете использовать это для 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 голос
/ 06 ноября 2016

Я знаю, что тема старая, но для тех, кто ищет что-то похожее, это может быть полезно.Я пытался добавить эту функцию в свою программу (запустив программу, поместив файл поверх EXE), и решение было очень простым, и оно пришло отсюда.Моя программа просто возилась с парой ячеек в файле Excel.Так что было совершенно очевидно, что он должен работать и делать все это, просто поместив в него файл Excel.Поэтому я добавил это в конструктор Form после инициализации компонента, и он работает для меня безупречно:

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 - это путь к моей программе, поэтому я проверилВторой аргумент - путь к файлу, который я перетаскиваю на исполняемый файл, поэтому я использую args[1].Я хотел бы, чтобы меня исправили, если я ошибаюсь, но пока все работает нормально с моей программой.

1 голос
/ 12 июля 2010

Дважды щелкните файл App.xaml в обозревателе решений. Вы можете добавить событие запуска. Его свойство e.Args дает вам доступ к аргументам командной строки.

1 голос
/ 12 июля 2010

Вам нужно найти какую-то точку входа (например, событие OnLoad для вашего главного окна) и затем получить доступ к аргументам командной строки, например:

string[] args = Environment.GetCommandLineArgs();
0 голосов
/ 26 июля 2013

Когда вы перетаскиваете файлы из Windows на EXE-файл, запускается EXE-файл, в котором имена файлов указываются в качестве аргументов командной строки.

public MainWindow()
{
    string[] args = Environment.GetCommandLineArgs();
    foreach (var s in args)
    {
        //do something with s (the file name)
    }
}
...