如何使用 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"对路径的访问被拒绝。
您收到安全异常,因为运行 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 对文件的读-写-执行权限。