标签: openfiledialog

我的文档路径重定向到 OneDrive 路径

我将从非常简单的代码开始



    string fileName; // filename of file            

    // get the filename
    using (OpenFileDialog openFileDialog = new OpenFileDialog()) {
          openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
          openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
          openFileDialog.FilterIndex = 1;
          openFileDialog.ShowDialog();
          fileName = openFileDialog.FileName;
    }

Run Code Online (Sandbox Code Playgroud)

我想做的是使用.Net OpenFileDialog.并将其设置InitialDirectory为运行应用程序的“我的文档”文件夹的用户。

代码将初始目录的路径设置为:C:\Users\Aaron\Documents,即测试用户的我的文档目录。

当我运行代码时,OpenFileDialog实际上是在目录中打开的:C:\Users\Aaron\OneDrive\Documents。这是 One Drive 位置。

我的两台机器上都发生这种情况,但我朋友的机器上却没有。

当路径未设置为 时,为什么 OneDrive 文档文件夹会打开OpenFIleDialog.InitialDirectory

编辑:我可能应该更新这个。第二天,我再次运行我的项目,问题不再发生。我也没有更改我的代码。这一定是一个侥幸的情况。

.net c# documents openfiledialog onedrive

5
推荐指数
1
解决办法
3739
查看次数

为什么在控制台应用程序中使用 CommonOpenFileDialog 时会出现此异常?

问题

我正在尝试使用 CommonOpenFileDialog 的文件夹选择器,如本答案中所述。问题是,即使有一个非常精简的示例项目,我在尝试使用 CommonOpenFileDialog 的函数时也会遇到异常ShowDialog()

代码

using Microsoft.WindowsAPICodePack.Dialogs;

namespace DialogTest
{
    class Program
    {
        public static void Main(string[] args)
        {
            CommonOpenFileDialog dialog = new CommonOpenFileDialog();
            dialog.InitialDirectory = "C:\\Users";
            dialog.IsFolderPicker = true;

            CommonFileDialogResult result = dialog.ShowDialog();

            if (result == CommonFileDialogResult.Ok)
            {
                //Do Stuff
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还与作者 Microsoft 一起使用以下 nuget 包:

  • Microsoft.WindowsAPICodePack-核心
  • Microsoft.WindowsAPICodePack-Shell

例外情况

此代码在 处产生以下异常dialog.ShowDialog();

System.Runtime.InteropServices.COMException was unhandled
  ErrorCode=-2147023116
  HResult=-2147023116
  Message=A null reference pointer was passed to the stub. (Exception from HRESULT: …
Run Code Online (Sandbox Code Playgroud)

c# dialog openfiledialog windows-api-code-pack

5
推荐指数
1
解决办法
3425
查看次数

是否存在Access 2010 64bit的"打开文件"对话框?

如何获取Access 2010 64bit的"打开文件"对话框?通常我会使用通用对话框控件,但它是32位,不能与Access 2010 64位一起使用.

ms-access vba openfiledialog access-vba ms-access-2010

4
推荐指数
3
解决办法
4万
查看次数

GetOpenFileName在64位失败,但在32Bit中工作?

我有以下代码,我用来使用Win32 API打开文件打开对话框.它在32位工作正常,但在64位(在DLL中)使用时失败.我究竟做错了什么?

 char Filestring[256];
Filter = "OBJ files\0*.obj\0\0";
char* returnstring = NULL;



OPENFILENAME opf;
opf.hwndOwner = mainHWND;
opf.lpstrFilter = Filter;
opf.lpstrCustomFilter = 0;
opf.nMaxCustFilter = 0L;
opf.nFilterIndex = 1L;
opf.lpstrFile = Filestring;
opf.lpstrFile[0] = '\0';
opf.nMaxFile = 256;
opf.lpstrFileTitle = 0;
opf.nMaxFileTitle=50;
opf.lpstrInitialDir = Path;
opf.lpstrTitle = "Open Obj File";
opf.nFileOffset = 0;
opf.nFileExtension = 0;
opf.lpstrDefExt = "*.*";
opf.lpfnHook = NULL;
opf.lCustData = 0;
opf.Flags = (OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT) & ~OFN_ALLOWMULTISELECT;
opf.lStructSize = sizeof(OPENFILENAME);

if(GetOpenFileName(&opf))
{
    returnstring = opf.lpstrFile; …
Run Code Online (Sandbox Code Playgroud)

windows 64-bit winapi openfiledialog

4
推荐指数
1
解决办法
9086
查看次数

如何在OpenFileDialog时释放内存?

Winform OpenFileDialog,每次打开它,内存都会增加,dispose()和OpenFileDialog = null不起作用,内存不会丢失..

怎么解决这个?

   private void btnLocalPicture_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofdSelectPicture = new OpenFileDialog();
        ofdSelectPicture.Filter = "PicFile|*.jpg;*.png;*.jpeg;*.gif;*.bmp;*.tif";
        if (ofdSelectPicture.ShowDialog() == DialogResult.OK)
        {
            if (showPicture != null)
                showPicture.Dispose();
            showPicture = Image.FromFile(ofdSelectPicture.FileName);
            if (pbShowPicture.Image != null)
                pbShowPicture.Image.Dispose();
            pbShowPicture.Image = showPicture;
            path = ofdSelectPicture.FileName;
            WordTip.Visible = false;
            if (pbShowPicture.Image != null)
                picOK.Enabled = true;
        }
        ofdSelectPicture.Dispose(); //not working
        ofdSelectPicture = null;  //not working
        GC.Collect();
    }
Run Code Online (Sandbox Code Playgroud)

c# openfiledialog

4
推荐指数
1
解决办法
2967
查看次数

继续打开OpenFileDialog,直到选择有效文件

我有打开OpenFileDialog的代码,我正在检查文件的大小以确保它不超过特定限制.但是,如果用户选择了一个大尺寸文件,我需要警告他并引导他返回对话框以选择其他文件或单击取消.

这就是我尝试过的:

        OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
        while (dialog.ShowDialog() != DialogResult.Cancel)
        {
                var size = new FileInfo(dialog.FileName).Length;
                if (size > 250000)
                {
                    MessageBox.Show("File size exceeded");
                    continue;
                }
        }
Run Code Online (Sandbox Code Playgroud)

编辑:我也尝试了以下代码,但每次调用ShowDialog时它都会打开对话框.因此,如果用户选择的文件大小为限制的3倍,则对话框将出现3次.

  OpenFileDialog dialog = new OpenFileDialog();
        dialog.Filter = "Jpeg files, PDF files, Word files|*.jpg;*.pdf;*.doc;*.docx";
        dialog.FileOk += delegate(object s, CancelEventArgs ev)
        {
            var size = new FileInfo(dialog.FileName).Length;
            if (size > 250000)
            {
                XtraMessageBox.Show("File size");
                dialog.ShowDialog();
            }
        };
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            XtraMessageBox.Show("File Selected");
        }
Run Code Online (Sandbox Code Playgroud)

.net c# openfiledialog while-loop

4
推荐指数
1
解决办法
6274
查看次数

如何在WPF OpenFileDialog中禁用正在使用的文件?

我的WPF应用程序正在使用Microsoft.Win32.OpenFileDialog来选择要打开的SQL Server 2008数据库.

它工作正常,但有一个问题:当对话框中选择的数据库以前在上次启动后的某个时间打开时,该文件似乎在后台由SQL服务器保持打开(即使我的应用程序没有打开它和我的应用程序已重新启动).当在OpenFileDialog中单击"确定"时,这会导致"另一个应用程序使用的文件"警告,并且在重新启动计算机之前,我无法使用该对话框打开该特定数据库.似乎OpenFileDialog尝试打开所选文件并执行该操作,发现它已被另一个应用程序(SQL Server)打开.如何禁用OpenFileDialog尝试打开所选文件,只返回所选文件的文件名而不进行任何检查?

我的代码看起来像这样:

public void OpenDatabase() {
    // Let user select database to open from file browser dialog
    // Configure open file dialog box
    var dlg = new Microsoft.Win32.OpenFileDialog();
    dlg.FileName = ""; // Default file name
    dlg.DefaultExt = ".mdf"; // Default file extension
    dlg.Filter = "Databases (.mdf)|*.mdf|All Files|*.*"; // Filter files by extension 
    dlg.CheckFileExists = false;
    dlg.CheckPathExists = false;

    // Show open file dialog box
    bool? result = dlg.ShowDialog();    // Gives file in use warning second time! …
Run Code Online (Sandbox Code Playgroud)

wpf openfiledialog

4
推荐指数
1
解决办法
2132
查看次数

OpenFileDialog显示不同的文件,具体取决于32位或64位架构的构建

我注意到OpenFileDialog未能显示目录中的所有文件,这发生在我的应用程序中,但也发生在其他 Windows本机程序,如任务管理器"新任务""浏览"选项(使用OpenFileDialog控件),是否有人知道原因和可能的解决方法为了那个原因?
即使以管理员身份运行任务管理器也没有修复它,因此它不是由特权引起的

编辑:我现在知道这是由一个名为文件系统重定向器的appcompat功能引起的,显然我正在启动任务管理器32位,以及我自己的应用程序,因此它向我展示了32位system32又名SysWOW64文件夹(在Windows上谈论奇怪的命名方案) 7 64bit System32有64位文件,SysWOW64有32位文件),当你运行某个应用程序的32位版本时,你无法通过OpenFileDialog任何方式访问64位System32文件夹.

例如,在这里看到,它缺少SnippingTool.exe(但它不仅限于)

TaskManager OpenFileDialog 虽然我确信它确实存在于目标位置
Windows资源管理器

.net vb.net openfiledialog

4
推荐指数
1
解决办法
266
查看次数

OpenFileDialog的初始目录

文件对话框必须打开关闭之前使用的最后一个目录位置,但我不知道如何执行此操作.我的同事只给我看了一个单词的例子,当你单击"文件"它显示最后使用的文件时,他告诉我使用寄存器或INI文件,这是我以前从未使用过的.

这是我正在使用的代码:

string f_sOudeLocatie = @"D:\path\is\classified";

private void btBrowse_Click(object sender, EventArgs e)
{
    OpenFileDialog fdlg = new OpenFileDialog();
    fdlg.Title = "Zoek de CSV file";
    fdlg.InitialDirectory = f_sOudeLocatie;
    fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
    fdlg.FilterIndex = 1;
    fdlg.RestoreDirectory = true;
    if (fdlg.ShowDialog() == DialogResult.OK)
    {
        tbGekozenBestand.Text = fdlg.FileName;
        tbVeranderNaamIn.Text = Path.GetDirectoryName(fdlg.FileName);
        f_sOudeLocatie = Path.GetDirectoryName(fdlg.FileName);
        f_sSourceFileName = fdlg.FileName;
        f_sDestFileName = Path.GetFileName(Path.GetDirectoryName(fdlg.FileName)) + ".csv";
        btOpslaan.Enabled = true;
        tbVeranderNaamIn.ReadOnly = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# openfiledialog winforms

4
推荐指数
1
解决办法
3万
查看次数

OpenFileDialog InitialDirectory不接受相对路径吗?

dialog是一个OpenFileDialog类对象,我正在使用ShowDialog()方法.

当我使用包含相对路径的路径时,例如:

dialog.InitialDirectory = "..\\abcd";
dialog.InitialDirectory = Directory.GetCurrentDirectory() + "..\\abcd";
Run Code Online (Sandbox Code Playgroud)

ShowDialog() 崩溃,我只能做一个明确的路径,从磁盘驱动器开始:

dialog.InitialDirectory = "C:\\ABC\\DEF\\abcd";
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我希望路径是我的.exe的当前目录的1级,然后向下到目录abcd)
.exe的当前路径可以找到Directory.GetCurrentDirectory(),这是完全正常的,但我不能继续"..")

目录层次结构如下:

ABC
    DEF 
        abcd (where i want)
        defg (where .exe is at)
Run Code Online (Sandbox Code Playgroud)

那么,有没有任何使用方法"..\\"InitialDirectory
或者我必须使用明确的路径?
谢谢!

c# relative-path openfiledialog

4
推荐指数
1
解决办法
7281
查看次数