C# 从 ListBox 按钮保存结果?

Posted

技术标签:

【中文标题】C# 从 ListBox 按钮保存结果?【英文标题】:C# Save Results from ListBox button? 【发布时间】:2020-06-08 21:17:45 【问题描述】:

我在 Windows Forms App (.NET Framework) 中创建了一个新项目,这是我拥有的代码:

private void SaveProxyResults_Click(object sender, EventArgs e)

    SaveFileDialog dlg = new SaveFileDialog();

    if (dlg.ShowDialog() == DialogResult.OK)
    
        StreamWriter writer = new StreamWriter(dlg.FileName);

        for (int i = 0; i < GatheredProxies.Items.Count; i++)
        
            writer.WriteLine((string)GatheredProxies.Items[i]);
        

        writer.Close();
    

    dlg.Dispose();

使用当前代码,保存文件菜单会弹出,但它不会自动转到您的桌面,也没有自动选择文件类型,我也无法将其另存为 .txt,因为它给了我一个错误。

如何编辑代码以使其自动选择 .txt 作为文件格式,能够输入文件名并自动选择桌面作为文件保存位置,同时仍然能够更改文件的位置文件应该保存在哪里?

【问题讨论】:

您是否阅读了SaveFileDialog FileDialog - WinForms 中的文档?有许多属性可让您完成所需的一切。 1) 错误是什么? 2) 我可以建议使用 FolderBrowserDialog 而不是 FileSaveDialogIO.File.CreateText(Path from your Folde),这也解决了 .txt 问题。阅读Create Text File 和FolderBrowser System.IO.IOException: '进程无法访问文件'C:\Users\JP\Desktop\Scraped Proxies123',因为它正被另一个进程使用。' 【参考方案1】:
            Stream myStream;
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            dlg.FilterIndex = 2;
            dlg.RestoreDirectory = true;

            if (dlg.ShowDialog() == DialogResult.OK)
            
                if ((myStream = dlg.OpenFile()) != null)
                
                    StreamWriter writer = new StreamWriter(dlg.FileName);

                    for (int i = 0; i < GatheredProxies.Items.Count; i++)
                    
                        writer.WriteLine((string)GatheredProxies.Items[i]);
                    

                    writer.Close();
                

                dlg.Dispose();
            

给我错误:

System.IO.IOException: 'The process cannot access the file 'C:\Users\JP\Desktop\Scraped Proxies123' because it is being used by another process.'

【讨论】:

请将此信息添加到您的原始答案中(使用编辑链接)并删除此答案。这不是一个答案。 您在调用dlg.OpenFile()时已经打开了文件,因此出现了错误。尝试将 myStream 传递给 StreamWriter 构造函数而不是文件名。【参考方案2】:

根据你的描述,你希望它自动选择.txt作为文件格式

并且能够输入文件名并自动选择桌面作为文件保存

位置。

你可以试试下面的代码来解决这个问题。

            Stream myStream;
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.Title = "";          
            dlg.InitialDirectory = @"C:\Users\username\Desktop";// Use the absolute path of your computer desktop
            dlg.Filter = "txt files (*.txt)|*.txt";
            dlg.FilterIndex = 1;
            if (dlg.ShowDialog() == DialogResult.OK)
                   
                if ((myStream = dlg.OpenFile()) != null)
                
                    myStream.Close();
                    StreamWriter writer = new StreamWriter(dlg.FileName);

                    for (int i = 0; i < GatheredProxies.Items.Count; i++)
                    
                        writer.WriteLine((string)GatheredProxies.Items[i]);
                    

                    writer.Close();
                

            

            dlg.Dispose();

【讨论】:

以上是关于C# 从 ListBox 按钮保存结果?的主要内容,如果未能解决你的问题,请参考以下文章

在C#如何实现从左边的listbox控件的内容移到右边的listbox控件

在c#中删除listBoxItem时ListBox不刷新

C#中的listBox

在C#窗体应用程序中怎么在窗口关闭前保存ListBox中的内容?代码是怎样的?

c# winform listbox 如何 获取 当前 选中的值 急!!!

隐藏或保护 .txt 保存数据 c#