获取用我的应用程序打开的文件的路径+文件名

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

我是 c# 的业余爱好者,我一直无法找到这个问题的答案。 也许我不知道正确的使用条款。

当一个视频文件被拖到我的 exe 应用程序上时,我希望应用程序知道它是用一个文件启动的,并且能够知道该文件的路径和文件名。这样,用户就不必使用文件>打开菜单。

希望这是有道理的。 谢谢

您需要应用程序的命令行参数。当您在 Explorer 中将文件拖放到应用程序时,Explorer 会打开包含您拖放到其中的文件的应用程序。您可以 select 任意数量的文件,将它们放在您的应用程序中并使用这行代码,files 将是这些命令行参数的数组。

string[] files = Environment.GetCommandLineArgs();

您可以检查用于启动应用程序的命令行参数。 如果您的应用程序是通过将文件拖放到 .exe 文件上启动的,那么将有一个带有文件路径的命令行参数。

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.
    }
}

正如您的问题标题所述,您需要路径和文件名。您可以使用以下方式获取文件名:

System.IO.Path.GetFileName(filePath); // returns file.ext

当您将文件拖入 C# 应用程序时,它将作为该应用程序的命令行参数。与控制台应用程序一样,您可以在 Program class.

的 Main 方法中捕获它

我将使用 Windows 表单应用程序进行解释。

在解决方案上打开程序 class。您的程序 class 应该如下所示。

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());
    }
}

默认情况下,当您创建 Windows Forms 应用程序时,它们不会处理命令行参数。您必须对 Main 方法的签名进行微小的更改,以便它可以接收参数:

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());
    }
}

现在您可以处理传递给应用程序的文件名参数。默认情况下,Windows 会将文件名作为第一个参数。只需做这样的事情:

    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));
    }

如果您想知道我的 Form1 的构造函数重载,就在这里。希望对您有所帮助!

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);
    }
}