流写入器没有抛出异常

本文关键字:抛出异常 | 更新日期: 2023-09-27 18:09:30

在下文中,如果文件不存在,streamwriter不会抛出异常。我期望它引发一个异常,为什么它没有,我怎么能让它这样做?

var fileName = HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/emails.txt");
FileStream fs = new FileStream(fileName, FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(String.Format("{0}'t{1}", email, name));
sw.Flush();
sw.Close();
fs.Close();

为什么?

流写入器没有抛出异常

FileStream fs = new FileStream(fileName, FileMode.Append);

如果该文件不存在,则创建该文件(如果存在则追加)。

假设从你的帖子(这是没有问题的!)你不希望它首先创建一个文件调用File.Exists来确保文件存在。

如果您想要确保您正在添加到现有文件中,请在写入之前先使用FileMode.Open,然后使用Seek。对于File.Exists,在检查之后但在FileStream构建之前,其他进程删除文件的机会(非常渺茫)。

试试这个:

try
{
    var fileName = HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/emails.txt");
    if (System.IO.File.Exists(fileName ))
    {
        FileStream fs = new FileStream(fileName, FileMode.Append);
        StreamWriter sw = new StreamWriter(fs);
        sw.WriteLine(String.Format("{0}'t{1}", email, name));
        sw.Flush();
        sw.Close();
        fs.Close();
    }
    else
    {
       //Throw error here
    }
}
catch()
{
}