Sha*_*ain 4 c# openfiledialog console-application .net-core .net-core-3.1
我想提供从电脑中任何位置选择文件的选项。目前我明确给出路径如下:
FileInfo existingFile = new FileInfo(@"C:\Users\User_name\Downloads\bank_statement.xlsx");
Run Code Online (Sandbox Code Playgroud)
使用EPPlus操作excel文件。如何直接从所需文件夹中获取文件?控制台应用程序 .NET Core 3.1 C#。
如果您确实想在没有依赖项的控制台应用程序中打开对话框(并且命令行参数不是一个选项),您可以在comdlg32.dll中调用GetOpenFileName。pinvoke.net提供了这些方法及其参数的 C# 定义。当然,这取决于平台(仅限 Windows)。
using System;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace DemoApp
{
// From https://www.pinvoke.net/default.aspx/Structures/OPENFILENAME.html
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OpenFileName
{
public int lStructSize;
public IntPtr hwndOwner;
public IntPtr hInstance;
public string lpstrFilter;
public string lpstrCustomFilter;
public int nMaxCustFilter;
public int nFilterIndex;
public string lpstrFile;
public int nMaxFile;
public string lpstrFileTitle;
public int nMaxFileTitle;
public string lpstrInitialDir;
public string lpstrTitle;
public int Flags;
public short nFileOffset;
public short nFileExtension;
public string lpstrDefExt;
public IntPtr lCustData;
public IntPtr lpfnHook;
public string lpTemplateName;
public IntPtr pvReserved;
public int dwReserved;
public int flagsEx;
}
public class Program
{
// From https://www.pinvoke.net/default.aspx/comdlg32/GetOpenFileName.html
[DllImport("comdlg32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool GetOpenFileName(ref OpenFileName ofn);
private static string ShowDialog()
{
var ofn = new OpenFileName();
ofn.lStructSize = Marshal.SizeOf(ofn);
// Define Filter for your extensions (Excel, ...)
ofn.lpstrFilter = "Excel Files (*.xlsx)\0*.xlsx\0All Files (*.*)\0*.*\0";
ofn.lpstrFile = new string(new char[256]);
ofn.nMaxFile = ofn.lpstrFile.Length;
ofn.lpstrFileTitle = new string(new char[64]);
ofn.nMaxFileTitle = ofn.lpstrFileTitle.Length;
ofn.lpstrTitle = "Open File Dialog...";
if (GetOpenFileName(ref ofn))
return ofn.lpstrFile;
return string.Empty;
}
public static void Main(string[] args)
{
var filename = ShowDialog();
Console.WriteLine(filename);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9387 次 |
| 最近记录: |