C#ZipArchive引用中断WIndows服务计时器

C#ZipArchive引用中断WIndows服务计时器,c#,windows,service,ziparchive,C#,Windows,Service,Ziparchive,我是新来的,也是C#的新手。我在一家零售商工作,今年之前一直在VisualStudio6中工作,但现在我正在自学c#,并重写过去21年来我所做的一切。你不希望你是我吗{ 无论如何,我有一个Windows服务,它定期执行一系列创建文件的作业。这些作业完成后,该服务会从中创建一个zip文件,并通知公司的服务器收集和删除zip文件。我已经为此服务苦苦挣扎了几天,因为计时器事件不会触发。所以我退出了将它简化为裸机——一个计时器和一个事件处理程序——这很有效。然后,我开始一次一点地添加工作程序代码,直到我

我是新来的,也是C#的新手。我在一家零售商工作,今年之前一直在VisualStudio6中工作,但现在我正在自学c#,并重写过去21年来我所做的一切。你不希望你是我吗{

无论如何,我有一个Windows服务,它定期执行一系列创建文件的作业。这些作业完成后,该服务会从中创建一个zip文件,并通知公司的服务器收集和删除zip文件。我已经为此服务苦苦挣扎了几天,因为计时器事件不会触发。所以我退出了将它简化为裸机——一个计时器和一个事件处理程序——这很有效。然后,我开始一次一点地添加工作程序代码,直到我缩小到导致问题的代码部分。这是ZipArchive调用。在我取消注释以下代码之前,一切都是有效的,特别是“using(var archive…)”挡块


非常感谢您的帮助。

使用
CreateFromDirectory(字符串、, 字符串)
来归档目录


通过将ZipArchive引用移动到一个单独的方法来解决。关于在计时器事件处理程序中调用这些调用的某些内容不起作用。奇怪的

我不喜欢c#中的using语句。它掩盖了异常消息。我宁愿将代码放入异常处理程序(try/catch)它显示错误,而不是继续,并且没有给出错误。查看您的代码,我怀疑您遇到了错误,因为您试图删除正在使用的文件。在尝试删除之前,您必须确保文件已关闭。更新:我尝试将ZipArchive引用设为类变量,但没有效果。计时器event never fire我删除了文件。Delete(…)但没有效果。整个方法处于try/catch状态,没有异常发生,但在事件处理程序的顶部存在从未发生的日志事件,包括使用(var fileWriter=new StreamWriter(“c:\\temp\\testtimer.txt”,true))对文件进行调试写入{fileWriter.WriteLine($”计时器在{eventArgs.SignalTime:yyyy-MM-dd HH:MM:ss})处触发);}首先在using-var归档块周围添加一个try/catch,记录exeption,如果不为null,还记录innerException。它将告诉您出了什么问题。CreateFromDirectory()无法排除文件,并且目录中可能存在不属于zip的文件
var transmissionFiles = Directory.GetFiles( _uploadDirectory, "*.trx" );
if (transmissionFiles.Length > 0)
{
    using (var zipfile = new FileStream( $"{_uploadDirectory}zp" +
        $"{DateTime.Now:yyyyMMdd}.{_storeNumber:D4}.{DateTime.Now:HHmmss}", FileMode.Open ))
    {
        using (var archive = new ZipArchive( zipfile, ZipArchiveMode.Update ))
        {
            foreach (var tFile in transmissionFiles)
            {
                archive.CreateEntry( tFile );
                File.Delete( tFile );
            }
        }
    }
}