saveFileDialog 停止工作 + 从 Internet 下载文件
Posted
技术标签:
【中文标题】saveFileDialog 停止工作 + 从 Internet 下载文件【英文标题】:saveFileDialog stop working + download a file from internet 【发布时间】:2012-08-27 17:25:32 【问题描述】:我想创建一个更新函数。当出现新版本时,会出现一个输入框,其中有一个下载按钮。当我按下该按钮时,saveFileDialog 将出现以将文件(新版本)保存在我想要的位置。
我有这个功能:
public void descarcare()
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.CreatePrompt = true;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.FileName = "myText";
saveFileDialog1.DefaultExt = "txt";
saveFileDialog1.Filter ="Text files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DialogResult result = saveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
try
WebClient webClient = new WebClient();
byte[] receivedData = webClient.DownloadData("http://startut.ro/smartAppointment.rar");
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(receivedData);
bw.Close();
fs.Close();
((IDisposable)fs).Dispose();
catch (Exception e)
string message = e.Message;
MessageBox.Show("Nu ai o conexiune de internet stabilită. Încearcă să te conectezi la internet, și după aceea să descarci noua versiune !", "EROARE CONEXIUNE INTERNET");
首先我用一个测试按钮试试看功能是否有效,然后我会在输入框中实现。
private void button14_Click(object sender, EventArgs e)
descarcare();
当我按下按钮时,会出现 saveFileDiaglog 并且在崩溃之后。任何 saveFileDialog 都会出现崩溃。如果我只有一个没有任何代码的 saveFileDialog,会崩溃,问题是 saveFileDialog。
【问题讨论】:
First.) 删除第一行“saveFileDialog1.ShowDialog();”没用!!第二。)你如何创建“saveFileDialog1”? 现在有效。问题是,当我使用 Visual C#(运行调试)和 saveFileDialog appers 运行程序时,会崩溃,但如果我尝试使用可执行文件运行应用程序,它将工作!感谢所有的答案! 【参考方案1】:删除第一行“saveFileDialog1.ShowDialog();”没用!!
删除
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
来自你的函数 descarcare();
你应该像这样创建它。
public partial class Form1: Form
....
internal SaveFileDialog SaveFileDialog1;
....
public Form1() : base()
....
this.SaveFileDialog1 = new SaveFileDialog();
....
为了获得更好的代码,您应该将 SaveFileDialog1 设置为类似这样。
....
SaveFileDialog1.CreatePrompt = true;
SaveFileDialog1.OverwritePrompt = true;
SaveFileDialog1.FileName = "myText";
SaveFileDialog1.DefaultExt = "txt";
SaveFileDialog1.Filter =
"Text files (*.txt)|*.txt|All files (*.*)|*.*";
SaveFileDialog1.InitialDirectory =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DialogResult result = SaveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
try
....
在 catch 块中,您还应该将“消息”放到输出中。
【讨论】:
我添加了,但是会崩溃!我用你的版本编辑了我的初始消息。 你删除了第一个“saveFileDialog1.ShowDialog();”【参考方案2】:像这样修改你的代码:
saveFileDialog1.ShowDialog();
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
try
WebClient webClient = new WebClient();
byte[] receivedData = webClient.DownloadData("http://startut.ro/smartAppointment.rar");
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(receivedData);
bw.Close();
fs.Close();
catch (Exception e)
string message = e.Message;
MessageBox.Show("Nu ai o conexiune de internet stabilită. Încearcă să te conectezi la internet, și după aceea să descarci noua versiune !", "EROARE CONEXIUNE INTERNET");
【讨论】:
那么这意味着你的应用程序在其他地方失败了。 出现 saveFileDialog 时失败。【参考方案3】:这是你的问题
**DialogResult result = saveFileDialog1.ShowDialog();**
您需要更改您正在执行的代码 DialogResult 结果 = saveFileDialog1.ShowDialog(); 到
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
// you need to Create an Instance of SaveFileDialog
var result = saveFileDialog1.ShowDialog();
if (result == DialogResult.OK)
//do your logic here..
【讨论】:
我想让人们可以选择文件路径! TransmitFile(FilePath + FileName 应该会提示保存对话框你试过了吗..? 我试试你的代码,但我有一个错误,我不知道如何解决! 不要使用确切的变量将它们替换为您的用例中的变量..还有什么错误..??? 命名空间“System.Web”中不存在类型或命名空间名称“HttpContext”。【参考方案4】:使用 silverlight,由于安全限制,它们不会为您提供正在保存的文件的位置。但是,您可以使用 OpenFile 函数将 Stream 对象获取到用户选择的文件。
查看this article,了解如何将 WebClient 与 Stream 对象一起使用。
【讨论】:
它在哪里说他正在使用 SilverLight AnDr3yy 请澄清你在这里实现什么类型的网络应用程序.. 我想做一个从网上下载rar的功能!是一个更新功能。我想让人们可以选择保存文件的路径! 你的标题说保存..你能把它改成说下载文件并保存到选定的位置来影响 首先我尝试使用 saveFileDialog,我认为是这样,但不是。 它最初被标记为 Silverlight。不知道它去了哪里。【参考方案5】:建议将代码重构为:-
WebClient webClient = new WebClient();
saveFileDialog1.ShowDialog();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler (FileDownloaded);//Implement this method to notify the download.
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
try
webClient.DownloadFileAsync("http://startut.ro/smartAppointment.rar", saveFileDialog1.FileName);
catch (Exception e)
string message = e.Message;
MessageBox.Show("Nu ai o conecsiune de internet stabilită. Încearcă să te conectezi la internet, și după aceea să descarci noua versiune !", "EROARE CONECSIUNE INTERNET");
进一步的 saveFileDialog1.FileName 给出了必须保存文件的完整路径,所以这应该不是问题。
但是我建议使用webClient.DownloadFileAsync
而不是webClient.DownloadFile
,因为稍后是阻塞调用。
【讨论】:
以上是关于saveFileDialog 停止工作 + 从 Internet 下载文件的主要内容,如果未能解决你的问题,请参考以下文章
SaveFileDialog AddExtension 无法按预期工作
SaveFileDialog AddExtension无法按预期工作