.AddSelectedFiles 上的 DotNetZIp TargetInvocationException
Posted
技术标签:
【中文标题】.AddSelectedFiles 上的 DotNetZIp TargetInvocationException【英文标题】:DotNetZIp TargetInvocationException on .AddSelectedFiles 【发布时间】:2013-11-06 09:11:21 【问题描述】:我正在尝试使用 selection 属性根据某些标准从目录中压缩文件列表。这是代码
using (ZipFile zip = new ZipFile())
string selection = "ctime > " + DateTime.Now.AddHours(-12).ToString("yyyy-MM-dd-HH:mm:ss");
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zip.AddSelectedFiles(selection, LogFolder, "", true);
if (zip.Entries.Count > 0)
zip.Name = ArchiveFile;
zip.Save();
如您所见,我正在尝试将过去 12 小时在日志文件夹中创建的文件存档。文件一直在日志文件夹中创建,它们在创建后大约 20 小时被删除,所以我尝试在 12 小时标记处存档它们,这样我就不会丢失文件,并且在我尝试存档时文件不会被删除.但是我仍然得到 System.Reflection.TargetInvocationException: 异常已被调用的目标抛出。 ---> System.IO.DirectoryNotFoundException: 找不到路径的一部分'\core\e$\Program Files\Aspect Software\Unified IP\Logs\DBIServer\DBIServer[2013.11.05-12.41.11.263][569 ].log'。
如您所见,我要归档的文件是在 2013 年 11 月 5 日 12:41 创建的,这段代码运行的时间超过了 12 小时。那么为什么我会得到这个异常呢?无论如何,该文件不应该进入存档!重要的是要注意,代码通常运行良好,并且确实可以正常工作,只归档正确的文件。所以也许错误与查看文件夹中所有文件的代码有关,即使它不会存档它们?有什么解决办法吗?
这就是整个堆栈跟踪: 信息 以用户身份执行:FCFS\fcdbadmin。 ...ion 10.50.4000.0 for 64-bit 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始时间:10:26:03 πμ 错误:2013-11-06 10:29:37.76 代码:0x00000001 来源:DBIServer 描述:System.Reflection.TargetInvocationException:调用目标已引发异常。 ---> System.IO.DirectoryNotFoundException: 找不到路径的一部分'\core\e$\Program Files\Aspect Software\Unified IP\Logs\DBIServer\DBIServer[2013.11.05-12.41.11.263][569 ]。日志'。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption) 在 System.IO.Directory.GetFiles (String path, String searchPattern, SearchOption searchOption) at System.IO.Directory.GetFiles(String path) at Ionic.Zip.ZipFile.AddOrUpdateDirectoryImpl(String directoryName, String rootDirectoryPathInArchive, AddOrUpdateAction action, Boolean recurse, Int32 level) at Ionic.Zip .ZipFile._AddOrUpdateSelectedFiles(String selectionCriteria, String directoryOnDisk, String directoryPathInArchive, Boolean recurseDirectories, Boolean wantUpdate) at Ionic.Zip.ZipFile.AddSelectedFiles(String selectionCriteria, String directoryOnDisk, String directoryPathInArchive, Boolean recurseDirectories) at ST_c13047ee91c340d78c1fbd7aa7c31ff9.csproj.Script ) --- 内部异常结束确认跟踪---在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo 文化) 在 System.RuntimeType.InvokeMember(字符串名称, BindingFlags bindingFlags, Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript() 处的 Binder 活页夹、对象目标、Object[] providedArgs、ParameterModifier[] 修饰符、CultureInfo 文化、String[] namedParams) 结束错误错误:2013-11-06 10 :30:57.80 代码:0x00000001 来源:CenterCord 描述:System.Reflection.TargetInvocationException:异常已被 inv 的目标抛出位置。 ---> System.IO.DirectoryNotFoundException: 找不到路径的一部分'\core\e$\Program Files\Aspect Software\Unified IP\Logs\CenterCord\CenterCord-[2013.11.05-11.57.07.462][ 716].log'。在 System.IO._Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption) 在 System.IO .Directory.GetFiles(String path, String searchPattern, SearchOption searchOption) at System.IO.Directory.GetFiles(String path) at Ionic.Zip.ZipFile.AddOrUpdateDirectoryImpl(String directoryName, String rootDirectoryPathInArchive, AddOrUpdateAction action, Boolean recurse, Int32 level)在 Ionic.Zip.ZipFile._AddOrUpdateSelectedFiles(String selectionCriteria, String directoryOnDisk, String directoryPathInArchive, Boolean recurseDirectories, Boolean wantUpdate) at Ionic.Zip.ZipFile.AddSelectedFiles(String selectionCriteria, String directoryOnDisk, String directoryPathInArchive, Boolean recurseDirectories) at ST_c13047ee91c340d78c1fbd7aa7c31ff9.cs ScriptMain.Main() --- 内部异常结束n 堆栈跟踪 --- 在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.R... 包执行 fa... 步骤失败。
【问题讨论】:
例外是DirectoryNotFoundException
,因此文件路径被用于预期目录路径的位置。如果您发布完整的堆栈跟踪(哪个方法引发异常?),可能会更容易提供帮助。
然后使用完整的堆栈跟踪进行编辑。问题是,即使它是 DirectoryNotFoundException,它也不应该查找这个目录,因为它是在 12 小时前创建的,所以它不应该通过选择标准
看起来该路径中的一个目录已被删除。我会说你有另一个进程删除目录同时作为对AddSelectedFiles
的调用。确保事先已完成目录删除。
如果您的进程每 20 小时删除一次,每 12 小时存档一次,那么这些进程将在 3 次删除和 5 次存档后同步,即。 60 小时。因此,您可能每 60 小时就会看到一次此错误。如果这是您得到的行为,如果删除处于活动状态,则在存档时添加某种延迟,反之亦然。
【参考方案1】:
事实证明,这毕竟是我的坏事。在 SSIS 包中,我将“CreateDeploymentUtility”设置为 False,因此每次部署包时,更改实际上并没有在服务器上生效。图书馆现在工作正常。
【讨论】:
以上是关于.AddSelectedFiles 上的 DotNetZIp TargetInvocationException的主要内容,如果未能解决你的问题,请参考以下文章