1

I have writtten a code to Create & write a file.But It doen't create a file.There's no any compilation error.My folder hierachy is DesktopModules -> SMSFunction->SMSText.I need to create a text file inside the SMSText folder,

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);
}


}
4

3 回答 3

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 块

于 2012-08-21T09:15:30.470 回答
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);
        }
于 2012-09-27T04:06:11.783 回答
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();
        }
于 2012-11-06T10:46:39.527 回答