Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF保存对话框(适用于windows 64)_C#_Wpf_Savefiledialog_Windows64 - Fatal编程技术网

C# WPF保存对话框(适用于windows 64)

C# WPF保存对话框(适用于windows 64),c#,wpf,savefiledialog,windows64,C#,Wpf,Savefiledialog,Windows64,这类似于这个网站上的旧帖子,但我一直收到一条错误消息。我想在C WPF中创建一个按钮,打开一个对话框并保存一个文本文件以供以后阅读。此代码适用于windows 32,但在windows 64上崩溃。如何更改此代码以使其在两个系统上都工作?我是编程的初学者 Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); //throws error message here private v

这类似于这个网站上的旧帖子,但我一直收到一条错误消息。我想在C WPF中创建一个按钮,打开一个对话框并保存一个文本文件以供以后阅读。此代码适用于windows 32,但在windows 64上崩溃。如何更改此代码以使其在两个系统上都工作?我是编程的初学者

Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog(); //throws error message here

    private void savebutton_Click(object sender, RoutedEventArgs e)
    {
        saveFile.FileName = Class1.stringjobnum; 
        saveFile.Filter = "CCurtain (*.cur)|*.cur"; 
        saveFile.FilterIndex = 2; 
        saveFile.InitialDirectory = "T:\\Tank Baffle Curtain Calculator\\SavedTanks"; 
        saveFile.OverwritePrompt = true; 

        bool? result = saveFile.ShowDialog();

        if (result.HasValue && result.Value)
        {
            clsSaveFile.s_FilePath = saveFile.FileName;
            int iDotLoc = clsSaveFile.s_FilePath.LastIndexOf('.');


            string strExtTest = clsSaveFile.s_FilePath.Substring(iDotLoc);
            if (strExtTest != ".cur")
                clsSaveFile.s_FilePath += ".cur";
            FileInfo sourceFile = new FileInfo(clsSaveFile.s_FilePath);
            clsSaveFile.saveFile();
        }
    }

您正在设置无效的FilterIndex,这可能与此有关

过滤器字符串中没有写入的第二个过滤器:

"CCurtain (*.cur)|*.cur"

尝试将FilterIndex设置为1或向字符串添加另一个筛选器。

您应该尝试在语句周围添加一个catch,以便更好地了解发生了什么

try
{ 
    code here
}
catch (Exception ex)
{
   ex.message contains the info
}
此外,请检查空值:

bool? result = saveFile.ShowDialog();

if (result != null &&  (result.HasValue && result.Value))
{
// code
}

我将在事件中创建对话框。你没有两个不同的过滤器

    private void savebutton_Click(object sender, RoutedEventArgs e)
    {
        Microsoft.Win32.SaveFileDialog saveFile = new Microsoft.Win32.SaveFileDialog();
        saveFile.FileName = Class1.stringjobnum; 
        saveFile.Filter = "CCurtain|*.cur";; 
        saveFile.FilterIndex = 1; 
        saveFile.InitialDirectory = "T:\\Tank Baffle Curtain Calculator\\SavedTanks"; 
        saveFile.OverwritePrompt = true; 

        // Show open file dialog box
        Nullable<bool> result = saveFile.ShowDialog();

        // Process open file dialog box results
        if (result == true)
        {
            string filename = saveFile.FileName;
            // are you sure you need to check the extension.
            // if so extension is a a fileinfo property
        }

您使用Microsoft.Win32 one而不是System.Windows.Forms one有什么原因吗?您收到的错误消息是什么?让SaveFileDialog在构造函数中崩溃表明您的计算机严重损坏。发帖至superuser.com,询问如何使其重新稳定。我曾尝试使用System.Windows.Forms one,但它不断向我提供有关缺少引用的信息。我无法理解这一点,所以我使用了这个代码,因为它与我的机器一起工作。但其他人则不然。我有预感win32是根本问题。如果你能告诉我要添加哪些参考资料,我可以试试看。我现在知道了。你是对的djdanlib,你必须使用windows窗体;下面是有效的代码:我添加了SaveFileDialog saveFile=newsavefiledialog;在私有空间内,取出以Microsoft.Win32开头的行…..将FilterIndex更改为1。仍然崩溃。我照你说的做了,这有点帮助。我现在知道它在IF语句中的某个地方失败了。我无法进一步分解它。若2的语句是什么呢?您可以发布异常消息吗?请记住,如果null able bool设置为null,那么如果检查bool的成员,您的if语句将崩溃?。首先尝试检查null,如果null,则不执行任何其他操作。我更新了我的答案。第一个if语句就是我所指的那个。我的结果值似乎不为null。请复制并将您提供的内容粘贴到我的代码中。dlg.ShowDialog;抛出一个错误。我将其更改为saveFile.ShowDialog;。那可能是我的错误。尽管如此,我还是运行了与上面相同的代码,除了dlg的更改,而且在windows32中也运行得很好。但是,当我尝试在windows64上运行时,它仍然会崩溃。我刚刚在Windows2008R2服务器64位上测试了它,它可以正常工作。检查编译器设置。我的是任何CPU。如果编译器设置为64位,则该控件可能无法工作。能否给我一个有关如何更改编译器设置的链接?只需右键单击“属性”并选择“生成”选项卡。但我改成了64位,它仍然对我有效,所以我不知道。