StreamWriter不会创建文本文件

时间:2012-08-21 08:20:57

标签: c# asp.net c#-4.0

我已经编写了一个代码来创建&写一个文件。但是它没有创建一个文件。没有任何编译错误。我的文件夹层次结构是DesktopModules - > SMSFunction-> SMSText。我需要在SMSText文件夹中创建一个文本文件,

public void WriteToFile(  string source, int dest, string messageIn, string operatorNew)
{
    try{

    string directory = ResolveUrl("~/DesktopModules/SMSFunction/SMSText");
    //string directory = Server.MapPath("~/DesktopModules/SMSFunction/SMSText");
    string filename = String.Format("{0:yyyy-MM-dd}__{1}.txt", DateTime.Now);
    string path = Path.Combine(directory, filename);

    if (!File.Exists(filename))
    {

        using (StreamWriter str = File.CreateText(path))
        {
            str.WriteLine("msisdn: " + source);
            str.WriteLine("shortcode : " + dest);
            str.WriteLine("Message : " + messageIn);
            str.WriteLine("Operator :" + operatorNew);
            str.Flush();

        }
    }
    else if (File.Exists(filename))
    {

        using (var str = new StreamWriter(filename))

        {
            str.WriteLine("msisdn: " + source);
            str.WriteLine("shortcode : " + dest);
            str.WriteLine("Message : " + messageIn);
            str.WriteLine("Operator :" + operatorNew);
            str.Flush();
        }

    }

}
catch(Exception ex)
{
    Response.Write(ex.Message);
}


}

3 个答案:

答案 0 :(得分:5)

这里有问题:

string filename = String.Format("{0:yyyy-MM-dd}__{1}.txt", DateTime.Now); . 

您调用string.Format传递需要两个参数{0:yyyy-MM-dd}{1}的格式字符串,但您只提供一个DateTime.Now。当你的代码到达那一行时会引发一个FormatException并跳转到catch块退出而不向磁盘写任何东西。

编辑: 如果您不想覆盖文件的内容,那么您应该使用允许附加到现有文件的StreamWriter的重载构造函数

.....
else if (File.Exists(filename))  
{  
    using (var str = new StreamWriter(filename, true))  
    {
         ....

但我认为你不需要检查File.Exists。如果仔细查看StreamWriter文档,您将看到文件在不存在时创建。所以上面的代码可以真正简化为

    using (var str = new StreamWriter(path, true))      
    {      
        str.WriteLine("msisdn: " + source);      
        str.WriteLine("shortcode : " + dest);      
        str.WriteLine("Message : " + messageIn);      
        str.WriteLine("Operator :" + operatorNew);      
        str.Flush();      
    }     

删除不必要的if块

答案 1 :(得分:2)

    private void SetPartnerTemplate()
        {
            var sb = new StringBuilder();
            widget.RenderControl(new HtmlTextWriter(new StringWriter(sb)));

            string setting = sb.ToString();

            string fileLoc = @"D:\sample1.txt";
            FileStream fs = null;
            if (!File.Exists(fileLoc))
            {
                using (fs = File.Create(fileLoc))
                {
                }
            }

            if (File.Exists(fileLoc))
            {
                using (StreamWriter sw = new StreamWriter(fileLoc))
                {
                    sw.Write(setting);
                }
            }
            if (File.Exists(fileLoc))
            {
                setting = File.ReadAllText(fileLoc);
            }
            else
            {
                Response.Write("<script language='javascript'>window.alert('File not found');</script>");
            }
            //after writing storing dat file to db

            //VoCServiceObj.SpSetWidgetRatingPartnerTemplate(setting, partnerid, productid);
        }

答案 2 :(得分:1)

       protected void btnUpload_Click(object sender, EventArgs e)
           {
            var sb = new StringBuilder();
            widget.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
            string setting = sb.ToString();
            string fileLoc = @"D:\Newsample.txt";
            FileStream fs = null;
            if (!File.Exists(fileLoc))
            {
                using (fs = File.Create(fileLoc))
                {
                }
            }
            if (File.Exists(fileLoc))
            {
                using (StreamWriter sw = new StreamWriter(fileLoc))
                {
                    sw.Write(setting);
                }
            }
            if (File.Exists(fileLoc))
            {
                setting = File.ReadAllText(fileLoc);
            }
            else
            {
                Response.Write("<script language='javascript'>window.alert('File not found');</script>");
            }

            FileStream st = new FileStream(fileLoc, FileMode.Open);
            byte[] buffer = new byte[st.Length];
            st.Read(buffer, 0, (int)st.Length);

            SqlConnection conn = new SqlConnection("Data Source=dsname;Initial Catalog=test;User ID=test;pwd=password");
            SqlCommand cmd1 = new SqlCommand();
            cmd1.Connection = conn;
            //OpenConnection(conn);
            conn.Open();
            SqlCommand cmd = new SqlCommand("INSERT INTO Files(Data) VALUES(@Data)", conn);


            //string commandText = "INSERT INTO Files VALUES(@Name, @ContentType, ";commandText = commandText + "@Size, @Data)";
            //cmd.CommandText = commandText;
            //cmd.CommandType = CommandType.Text;

            //cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 100);
            //cmd.Parameters.Add("@ContentType", SqlDbType.VarChar, 50);
            //cmd.Parameters.Add("@size", SqlDbType.Int);
            cmd.Parameters.Add("@Data", SqlDbType.VarBinary);

            //cmd.Parameters["@Name"].Value = "name";
            //cmd.Parameters["@ContentType"].Value = "contentType";
            //cmd.Parameters["@size"].Value = 5;
            cmd.Parameters["@Data"].Value = buffer;
            cmd.ExecuteNonQuery();

            SqlCommand command = new SqlCommand("select Data from Files", conn);
            byte[] buffer3 = (byte[])command.ExecuteScalar();

            FileStream fs2 = new FileStream(@"D:\op.txt", FileMode.Create);
            fs2.Write(buffer, 0, buffer.Length);
            fs2.Close();
            st.Close();
            conn.Close();
        }