我正在尝试在zip文件中编写xml。
static void Main(string[] args)
{
String strPathofZip = @"C:/Work/Zip/PATHDATA DT2.zip";
ZipFile zipFile = new ZipFile(strPathofZip);
zipFile.BeginUpdate();
foreach (ZipEntry ze in zipFile)
{
if (ze.Name == "SOURCEDATACONFIG.XML")
{
StreamReader s = new StreamReader(zipFile.GetInputStream(ze));
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(s);
XmlNodeList NodeList = XDoc.SelectNodes(@"R/I");
foreach (XmlNode Node in NodeList)
{
XmlElement Elem = (XmlElement)Node;
Elem.SetAttribute("url", "77");
//Elem.SetAttribute("url", "3");
}
XDoc.Save("SOURCEDATACONFIG.XML");
}
zipFile.Add(ze.Name);
}
}
Console.WriteLine(zipFile.Name);
zipFile.CommitUpdate();
Console.ReadLine();
}
该代码在控制台应用程序中运行,并且Xml已更新,但是
如果我尝试将相同的代码作为窗体中的函数使用... 它会抛出错误
private void settingAttributeinZipppedXML(string ZipPath)
{
ZipFile zipFile = new ZipFile(ZipPath);
zipFile.BeginUpdate();
foreach (ZipEntry ze in zipFile)
{
if (ze.Name == "SOURCEDATACONFIG.XML")
{
using (StreamReader s = new StreamReader(zipFile.GetInputStream(ze)))
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(s);
XmlNodeList NodeList = XDoc.SelectNodes(@"R/I");
foreach (XmlNode Node in NodeList)
{
XmlElement Elem = (XmlElement)Node;
Elem.SetAttribute("url", "12");
}
XDoc.Save("SOURCEDATACONFIG.XML");
}
zipFile.Add(ze.Name);
}
}
zipFile.CommitUpdate();
}
错误为:
无法找到文件“C:\Work\Zip\PATHDATA DT2.zip.561.tmp”。
还有一件事:如果我调试代码一段时间程序就可以运行。
是什么原因导致了这种行为?
以下是堆栈跟踪:
堆栈跟踪: 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 中 在 System.IO.File.Move(String sourceFileName, String destFileName) 中 在 ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage.ConvertTemporaryToFinal() 中 在 ICSharpCode.SharpZipLib.Zip.ZipFile.RunUpdates() 中 在 ICSharpCode.SharpZipLib.Zip.ZipFile.CommitUpdate() 中 在 SDEProfilePathEditor.SDEProfilePathEditorForm.settingAttributeinZipppedXML(String ZipPath) 中 在 System.Windows.Forms.Control.OnClick(EventArgs e) 中 在 System.Windows.Forms.Button.OnClick(EventArgs e) 中 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 中 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 中 在 System.Windows.Forms.Control.WndProc(Message& m) 中 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 中 在 System.Windows.Forms.Button.WndProc(Message& m) 中 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 中 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 中 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 中 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 中 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 中 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 中 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 中 在 System.Windows.Forms.Application.Run(Form mainForm) 中 在 SDEProfilePathEditor.Program.Main() 中 在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 中 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 中 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 中 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 中 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 中 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 中 在 System.Threading.ThreadHelper.ThreadStart() 中 内部异常:
using (StreamReader s...
,还是这只是一个打字错误?这有点重要... - Andrei V