如何使用c#在Web服务中将文本写入txt文件?

时间:2014-11-20 15:05:29

标签: c#

我有一个Web服务。这个服务从一些客户端向sql插入数据。我尝试将插入行和任何Exception写入txt文件。

void WriteLog(string Log)
{
    string FileName= "D:\\MyLogs.txt";
    StreamWriter obj;
    obj= new StreamWriter(FileName);
    obj.WriteLine(DateTime.Now.ToString() + " " + Log);
    obj.Close();
}

int row;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString);

SqlCommand cmd = new SqlCommand();

[WebMethod]
public int InsertTable(int Age) {
    try {
        con.Open();
        cmd.CommandText=@"Insert into Table(Age) values(@Age)";
        cmd.Parameters.Add(new SqlParameter("Age", SqlDbType.Int, 32, "Age"));
        cmd.Parameters["Age"].Value = Age;
        cmd.Connection = con;
        cmd.ExecuteNonQuery();
        row = cmd.ExecuteNonQuery();

        WriteLog(row.ToString());    
    }
    catch (Exception ex) {
        WriteLog(ex.ToString());    
    }
    finally {
        con.Close();
        con.Dispose();
        cmd.Dispose();
    }
    return row;
}

我收到此错误:' D:\ MyLogs.txt'拒绝访问该路径。

2 个答案:

答案 0 :(得分:4)

您收到安全性异常,因为您的asp.net运行用户没有必要的权限来写入D:驱动器。使用以下命令在应用程序中获取可写路径。

    private void WriteLog(string log)
    {
        string fileName= HttpContext.Current.Request.MapPath("MyLogs.txt");
        StreamWriter sw = new StreamWriter(fileName);
        sw.WriteLine(DateTime.Now.ToString() + " " + log);
        sw.Close();
    }

此方法将为您提供运行(或部署)应用程序的路径。 例如:您将应用程序部署到" c:\ inetpub \ www \ app1",然后您将写入" c:\ inetpub \ www \ app1 \ MyLogs.txt"。它将根据您的项目在您的开发机器中进行更改。

当然这个方法会重写每个日志,因此MyLogs.txt只包含一个日志。使用以下命令附加到您的日志文件。

    private void WriteLog(string log)
    {
        string fileName= HttpContext.Current.Request.MapPath("MyLogs.txt");

        using (StreamWriter sw = File.AppendText(fileName)) 
        {
            sw.WriteLine(DateTime.Now.ToString() + " " + log);
        }   

    }

当然,您可以为您的正在运行的用户提供“D:drive"但我建议不要这样做。您的应用程序应在没有其他权限的情况下运行。

答案 1 :(得分:1)

您需要确保运行该线程的凭据可以访问该文件。尝试让IUSR拥有该文件的读写执行权限。