gpt4 book ai didi

c# - 如何在 .NET 中使用 OpenFileDialog 获取文件名(1000 多个文件多选)

转载 作者:行者123 更新时间:2023-11-30 21:21:43 26 4
gpt4 key购买 nike

也许你们中的一些人以前遇到过这个……

我正在打开文件进行解析。当然,我正在使用 OpenFileDialog,但我仅限于 .FileNames 字符串上的 2048 缓冲区。因此,我只能选择几百个文件。这对大多数情况来说是可以的。但是,例如,我在一个案例中有 1400 个文件要打开。您知道使用打开文件对话框执行此操作的方法吗?我只想要 .FileNames 的字符串数组,我将其传递给解析器类。

我还考虑提供一个 FolderBrowserDialog 选项,然后我会使用一些其他方法来循环访问目录中的所有文件,例如 DirectoryInfo 类。如果我不能拥有一个一体化的解决方案,我会把它作为最后的手段。

最佳答案

我最终做的是编写一个使用 OpenFileDialog 的方法,但间接检查路径字符串的长度。也就是说,如果该方法失败,则会向用户显示一个错误,告诉他们文件太多,然后会显示一个 FolderBrowser,其中包含用户正在查看的所选文件夹。我还添加了单独的选项来导入文件或导入菜单栏中的文件夹。

这是执行此操作的代码。这些是名为 DataFileIO 的静态类中的方法,我将所有自定义 IO 内容放入 excel 或 access 或 xml 等中。

        public static string[] GetFiles()
{
string[] fileNames;
OpenFileDialog openFileDialog1 = new OpenFileDialog();

openFileDialog1.InitialDirectory = UniversalDataImporter.Properties.Settings.Default.openFilePath;
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = false;
openFileDialog1.Multiselect = true;
openFileDialog1.CheckFileExists = false;

try
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK && openFileDialog1.FileNames.Count() <501 )
{
UniversalDataImporter.Properties.Settings.Default.openFilePath =
Path.GetDirectoryName(openFileDialog1.FileName);
UniversalDataImporter.Properties.Settings.Default.Save();
return fileNames = openFileDialog1.FileNames;
}
else if (result == DialogResult.Cancel)
{
return null;
}
else
{
if (MessageBox.Show("Too many files were Selected. Would you like to import a folder instead?",
"Too many files...", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
return fileNames = GetFilesInFolder();
}
else
{
return null;
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
return null;
}
}

public static string[] GetFilesInFolder()
{

FileInfo[] fileInfo;

string pathName;
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

folderBrowserDialog.RootFolder = System.Environment.SpecialFolder.Desktop;

DialogResult results = folderBrowserDialog.ShowDialog();

if (results == DialogResult.OK)
{
try
{
pathName = folderBrowserDialog.SelectedPath;

DirectoryInfo dir = new DirectoryInfo(pathName);
if (dir.Exists)
{

fileInfo = dir.GetFiles();

string[] fileNames = new string[fileInfo.Length];

for (int i = 0; i < fileInfo.Length; i++)//this is shit
{
fileNames[i] = fileInfo[i].FullName;
}

return fileNames;
}
else
{
return null;
}


}
catch (Exception ex)
{
MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
return null;
}

}
else if (results == DialogResult.Cancel)
{
return null;
}
else { return null; }
}

关于c# - 如何在 .NET 中使用 OpenFileDialog 获取文件名(1000 多个文件多选),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2607596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com