试图使用FileStream和StreamWriter编写LogFile的异常

时间:2012-12-13 18:43:58

标签: c# .net windows-services

所以基本上我编写了一个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)

形成一个字符串。

其余的工作得很好。

感谢您的回复!

3 个答案:

答案 0 :(得分:0)

因为你的using语句还没有发布文件。你在蒸汽中打开它,所以在关闭你的流之前你不能写它。

如果您只想简单地将文字写入文件,请使用:

File.WriteAllText(FILEPATH, TEXTDATA);

该调用将打开文件,写入文件,然后关闭它。

答案 1 :(得分:0)

如果它抛出使用...确保文件上的所有其他流都正确关闭...

如果它抛出了streamwriter构造函数

使用构造函数

中的新文件流将use更改为流编写器

答案 2 :(得分:0)

/ Windows / system32需要管理员权限。您的应用程序可能没有使用适当的权限运行。您应该尝试将日志写入另一个(限制较少)的位置。如果您需要写入system32,请确保您的服务以管理员权限运行。