c#进程停止后无法删除日志文件

时间:2010-07-16 19:58:54

标签: file-io c#-4.0 process

我在服务器上有很多进程,我试图停止,删除日志文件,并最终重新启动。我的问题是,一旦所有进程停止(即使是写入日志文件的进程),我无法以编程方式删除日志文件(但我可以手动)。我收到的错误是“进程无法访问该文件,因为它正被另一个进程使用。即使我验证进程已停止并让线程进入休眠状态,我也无法删除该文件。

我试过Controller.close()controller.reset();似乎没什么用。

        public static void Stop()
        {
            foreach (var service in Services) {
                Controller.ServiceName=service;

                if (Controller.Status == ServiceControllerStatus.Stopped) {
                    Console.WriteLine("{0} was not running.", Controller.DisplayName);

                }else {
                    Console.WriteLine("Stopping {0} on {1}", Controller.DisplayName, Controller.MachineName);

                    try {
                        Controller.Stop();
                        Controller.WaitForStatus(ServiceControllerStatus.Stopped);

                    } catch (InvalidOperationException) {
                        Console.WriteLine("Could not stop {0}", Controller.DisplayName);
                }
                    Console.WriteLine("Service {0} now set to {1}", Controller.DisplayName, Controller.Status);
                }
            }

            Console.WriteLine("\nDeleting Log Files on " + Controller.MachineName + " ...");
            DeleteLogFiles();

        }

        private static void DeleteLogFiles()
        {
            foreach (var file in
                Paths.SelectMany(path => FormatsToDelete, Directory.GetFiles).SelectMany(fileList => fileList)) {
                try {
                    File.Delete(file);
                }catch(IOException io) {
                    Console.WriteLine("\n" + io.Message);
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

当你的服务停止时,你的所有服务是否都会在他们写入的文件上调用Close?

答案 1 :(得分:0)

Conrad Frix是对的,虽然服务已停止,但该过程仍在运行,并且未发布该文件。