小弟要写一个c#窗体程序出错的程序大体如下:
private void button1_Click(object sender, EventArgs e)
{
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "文件(ccvt)|*.ccvt;|Ccvt压缩文件(*.ccvt)|*.ccvt";
                if (sfd.ShowDialog() != DialogResult.OK)
                    return;
                Compress(sfd.FileName);//这是自己写的函数,本意只是需要要写入的文件路径和文件名而  在这函数中自己创建文件流然后写入
}但是运行以后,文件创建了却只是0字节大小。无语的是,改成下面这样,却能正常输出所应当有的大小的文件
private void button1_Click(object sender, EventArgs e)
{
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "文件(ccvt)|*.ccvt;|Ccvt压缩文件(*.ccvt)|*.ccvt";
                if (sfd.ShowDialog() != DialogResult.OK)
                    return;
                Compress(@"C:\t\tt.ccvt");//这是自己写的函数,本意只是需要要写入的文件路径和文件名而  在这函数中自己创建文件流然后写入
}也调试了,两种情况下,分别去看了传给Compress函数的参数都是同样的"C:\\t\\tt.ccvt"呀!
想不通,望高手指教。

解决方案 »

  1.   

    把你的Compress函数创建文件的方法贴出来看看,最好是完整的代码,问题出在那里面应该。
      

  2.   

    Compress()这个方法是干嘛的啊?你创建了文件 往里面写东西了 你要贴主要代码啊 不然鬼知道你程序是怎么实现的啊
      

  3.   

    你的Compress方法的参数名是string 类型吧,所以,就会出现你那个情况……
    你的这个string是想获取保存文件的路径,那一般我们都是@,标识是路径,或者是转义符号。
      

  4.   

    再细心调试看看,留意sfd.FileName传到Compress()里后的情况。
    还有你可以先把Compress()函数简化一下,参数传递进去后就简单地写一个字符串"abc",然后就关闭文件。看看能否写入。
      

  5.   

    谢谢大家指点
    那个Compress是定义为 void Compress(string fileName),里面挺乱的就不写了
    其中将fileName又传给了另一个函数void WriteFile(string fileName)
    然后在WriteFile中就
    using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
    {...各种stream.Write....}
    传来传去的,但是fileName只是字符串而已啊,不能随意传吗?
    为什么Compress输入参数为@"C:\t\tt.ccvt"是可以正常运行呢?
    不是说SaveFileDialog只是获取要存储的文件路径和文件名吗?难道调用它的是候它创建了文件并且锁住了不让写????
      

  6.   

    SaveFileDialog saveFileDialog = new SaveFileDialog();  
    saveFileDialog.Filter = "Execl files (*.xls)|*.xls";  
    saveFileDialog.FilterIndex = 0;  
    saveFileDialog.Title = "";  
    saveFileDialog.FileName ="";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {string name = saveFileDialog.FileName;}
      

  7.   


    private void button1_Click(object sender, EventArgs e)
    {
      SaveFileDialog sfd = new SaveFileDialog();
      sfd.Filter = "文件(ccvt)|*.ccvt;|Ccvt压缩文件(*.ccvt)|*.ccvt";
      if (sfd.ShowDialog() != DialogResult.OK)
      {
           Compress(sfd.FileName);
      }
    }
      

  8.   

    private void button1_Click(object sender, EventArgs e)
    {
      SaveFileDialog sfd = new SaveFileDialog();
      sfd.Filter = "文件(ccvt)|*.ccvt;|Ccvt压缩文件(*.ccvt)|*.ccvt";
      if (sfd.ShowDialog() == DialogResult.OK)
      {
           Compress(sfd.FileName);
      }
    }
      

  9.   

    谢谢大家的帮助,问题已经解决了。是因为我自己在后边加了一段屎一般的程序:
    private void button1_Click(object sender, EventArgs e)
    {
      ....
      if (sfd.FileName != "")
      {
          System.IO.Stream stream = sfd.OpenFile();/貌似就是这里把写好的文件又清空了
          length = (float)stream.Length;
      }
      label11.Text = Math.Round(length / 1024, 2) + "MB";
    }我自己提问的时候没有把问题说清楚,对不起大家了。。