Я не могу использовать OpenFileDialog в моем приложении.
В качестве альтернативы я использую метод GetOpenFileName ():
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Reader
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenFileName
{
public int lstructSize;
public IntPtr hwndOwner;
public IntPtr hInstance;
public string lpstrFilter = null;
public string lpstrCustomFilter = null;
public int lMaxCustomFilter;
public int lFilterIndex;
public string lpstrFile = null;
public int lMaxFile = 0;
public string lpstrFileTitle = null;
public int lMaxFileTitle = 0;
public string lpstrInitialDir = null;
public string lpstrTitle = null;
public int lFlags;
public ushort nFileOffset;
public ushort nFileExtension;
public string lpstrDefExt = null;
public int lCustData;
public int lpfHook;
public int lpTemplateName;
}
public class OpenDialog
{
[DllImport("Comdlg32.dll",CharSet = CharSet.Auto)]
public static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
}
}
А затем используйте его в событии OnClick для кнопки, подобной этой:
OpenFileName qofn = new OpenFileName();
qofn.lstructSize = Marshal.SizeOf(qofn);
qofn.lpstrFile = "";
qofn.lMaxFile = 256;
qofn.lpstrFileTitle = "";
qofn.lMaxFileTitle = 64;
qofn.hInstance = this.Handle;
source.Text = "Wait...";
if (OpenDialog.GetOpenFileName(qofn))
{
MessageBox.Show("ofn.file: " + qofn. lpstrFile );
}
Когда приложение запускается и нажимается кнопка, и я пытаюсь открыть файл, вот что происходит:
1-я попытка:
возвращает путь к моему файлу, но вместо
C: \ Dira \ DIRB \ DIRC \ имяфайла.рсш
я имею
C: \ Dira \ DIRB \ dircfilename.ext
без '\' перед именем файла
2-я попытка
Все в порядке
следующая:
случаются случайные сбои, например нарушение произвольного доступа или зависание графического интерфейса пользователя, а также невозможность остановки процесса приложения даже в диспетчере задач или другие ошибки.
Обычно диалог работает 2-3 раза, прежде чем приложение перестает работать навсегда.
Что не так с моим кодом?
EDIT:
Я не могу использовать OpenFileDialog. Я использую WinPE 4.0 (Windows ADK). Когда я пробую OpenFileDIalog, он выдает ошибку времени выполнения 80040111 . Вероятно, это связано с тем, что ядро не поддерживается (так же, как Server Core не поддерживает OpenFileDialog, ошибка та же). Вероятно, в WinPE 4.0 они используют GetOpenFileName в таких приложениях, как блокнот. И это работает для них.