我是 c# 的业余爱好者,我一直无法找到答案。也许我不知道要使用的正确术语。
当一个视频文件被拖到我的 exe 应用程序上时,我希望应用程序知道它是用一个文件启动的,并且能够知道该文件的路径和文件名。这样,用户不必使用文件>打开菜单。
希望这是有道理的。谢谢
您可以检查用于启动应用程序的命令行参数。如果您的应用程序是通过将文件放在 .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 类的 Main 方法中捕获它。
我将使用 Windows 窗体应用程序对其进行解释。
在解决方案上打开您的程序类。你的程序类应该是这样的。
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 窗体应用程序时,它们不处理命令行参数。您必须对 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);
}
}
您需要应用程序的命令行参数。当您在资源管理器中将文件拖放到应用程序时,资源管理器会打开应用程序,其中包含您拖放的文件。您可以选择任意数量的文件,将它们放到您的应用程序中,并使用这行代码,files
将成为这些命令行参数的数组。
string[] files = Environment.GetCommandLineArgs();