Get path+filename of file that was opened with my application

后端 未结 3 1996
傲寒
傲寒 2020-12-11 09:41

I\'m an amateur at c# and I\'ve been unable to locate the answer to this. Perhaps I am not aware of the correct terms to use.

When a video file is dragged onto my ex

相关标签:
3条回答
  • 2020-12-11 10:04

    You can check the command line arguments which were used to launch the application. If your application was started by dropping a file on the .exe file, there will be a single command line argument with the path of the file.

    string[] args = System.Environment.GetCommandLineArgs();
    if(args.Length == 1)
    {
        // make sure it is a file and not some other command-line argument
        if(System.IO.File.Exists(args[0])
        {
            string filePath = args[0];
            // open file etc.
        }
    }
    

    As your question title states, you want the path and the file name. You can get the file name using:

    System.IO.Path.GetFileName(filePath); // returns file.ext
    
    0 讨论(0)
  • 2020-12-11 10:24

    When you drag a file into a C# application, it will goes as an command-line argument to that application. Like console applications, you can catch it on the Main method on the Program class.

    I'll explain it using Windows Forms application.

    Open your Program class on the solution. Your program class should look like this.

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    

    By default, when you create Windows Forms applications, they don't treat command line arguments. You have to make a tiny change on the signature of the Main method, so it can receive arguments:

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    

    Now you can handle file name argument passed to the application. By default, Windows will put the file name as the first argument. Just do something like this:

        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
    
            // Before Application.Run method, treat the argument passed.
            // I created an overload of the constructor of my Form1, so
            // it can receive the File Name and load the file on some TextBox.
    
            string fileName = null;
    
            if (args != null && args.Length > 0)
                fileName = args[0];
    
            Application.Run(new Form1(fileName));
        }
    

    In case you want to know the constructor overload of my Form1, here it is. Hope it helps!

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        public Form1(string fileName) : this()
        {
            if (fileName == null)
                return;
    
            if (!File.Exists(fileName))
            {
                MessageBox.Show("Invalid file name.");
                return;
            }
    
            textBox1.Text = File.ReadAllText(fileName);
        }
    }
    
    0 讨论(0)
  • 2020-12-11 10:30

    You need your application's command-line arguments. When you drop a file on your application in Explorer, Explorer opens the application with the file you dropped on it. You can select as many files as you want, drop them on your application and using this line of code, files will be an array of those command line arguments.

    string[] files = Environment.GetCommandLineArgs();
    
    0 讨论(0)
提交回复
热议问题