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

本文关键字:服务 txt 文件 Web 何使用 文本 | 更新日期: 2023-09-27 18:31:17

我有一个网络服务。此服务将数据从某些客户端插入到 sql。我尝试将插入的行和任何异常写入 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"对路径的访问被拒绝。

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

您收到安全异常,因为运行 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:驱动器"的必要权限,但我建议不要这样做。应用程序应在没有其他权限的情况下运行。

您需要确保运行线程时使用的凭据有权访问该文件。尝试授予 IUSR 对文件的读-写-执行权限。