所以基本上我编写了一个Windows服务,它扫描任何给定目录中的zip文件,然后将其上传到FTP服务器。我添加了一个跟踪方法,假设写入txt文件并保留所有内容的日志。当我将服务发布到Windows时出现问题我在事件查看器中收到错误消息(我添加了一个使用EventLog类的LogEvent)返回
System.IO.IOException:进程无法访问该文件 'C:\ Windows \ system32 \ traceLog.txt'因为它正被另一个人使用 过程
执行跟踪的代码如下
private void EscribirTrace(string mensaje)
{
if (Tracing)
{
try
{
using (FileStream archivo2 = new FileStream(string.Format("{0}\\traceLog.txt", Environment.CurrentDirectory), FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
mensaje = string.Format("{0} - {1} \r\n", DateTime.Now, mensaje);
StreamWriter writer = new StreamWriter(archivo2);
writer.WriteLine(mensaje);
writer.Flush();
writer.Dispose();
}
}
catch (Exception ex)
{
LogEvent("Error en escribir tracing", ex);
}
}
}
任何想法都将不胜感激
编辑因此经过一些研究后我发现system32不是文件的最佳位置。我的目的是让路径上的日志文件安装了服务。经过一些研究,我取代了
Enviroment.CurrentDirectory
代表
Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().Location).Replace(
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)
形成一个字符串。
其余的工作得很好。
感谢您的回复!
答案 0 :(得分:0)
因为你的using语句还没有发布文件。你在蒸汽中打开它,所以在关闭你的流之前你不能写它。
如果您只想简单地将文字写入文件,请使用:
File.WriteAllText(FILEPATH, TEXTDATA);
该调用将打开文件,写入文件,然后关闭它。
答案 1 :(得分:0)
如果它抛出使用...确保文件上的所有其他流都正确关闭...
如果它抛出了streamwriter构造函数
使用构造函数
中的新文件流将use更改为流编写器答案 2 :(得分:0)
/ Windows / system32需要管理员权限。您的应用程序可能没有使用适当的权限运行。您应该尝试将日志写入另一个(限制较少)的位置。如果您需要写入system32,请确保您的服务以管理员权限运行。