Перетащите файл поверх файла .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)
    }
}