C#调试时 正常 一运行就报错

lijianqiang2666 2010-05-14 08:36:00
写了一段倒出 Excel的 代码 同时 把文件名 修改成 系统时间 断点调试是 调了n遍都正常 一段一段的代码看 也没问题 可运行就 顶多导出一次 就报错了
错误《--------------------------------------------------》
************** 异常文本 **************
System.IO.IOException: 另一个进程正在使用此文件,因此该进程无法访问此文件。
在 股份管理系统.Form5.button2_Click(Object sender, EventArgs e) 位置 H:\股份管理系统\股份管理系统\Form5.cs:行号 298
在 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.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
《-----------------------------------------------------------------------》
下面是代码

这是 这是 倒出Excel 没错 改名的地方就错了


try
{
Class cl = new Class();
OfficeExcel oe = new OfficeExcel();
string path;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
path = saveFileDialog1.FileName;
oe.AddExcel(path);
oe.OpenExcel(path);
oe.SetCells("1", "A", "卡号");
oe.SetCells("1", "B", "户号");
oe.SetCells("1", "C", "姓名");
oe.SetCells("1", "D", "性别");
oe.SetCells("1", "E", "生日");
oe.SetCells("1", "F", "政治面貌");
oe.SetCells("1", "G", "身份证号");
oe.SetCells("1", "H", "组别");
oe.SetCells("1", "I", "组别");
oe.SetCells("1", "J", "地址");
oe.SetCells("1", "K", "籍贯");
oe.SetCells("1", "L", "工作地址");
oe.SetCells("1", "M", "民族");
oe.SetCells("1", "N", "文化程度");
oe.SetCells("1", "O", "婚姻状态");
oe.SetCells("1", "P", "与户主关系");
oe.SetCells("1", "Q", "职业");
oe.SetCells("1", "R", "何时迁入");
oe.SetCells("1", "S", "人口股份");
oe.SetCells("1", "T", "工龄");
oe.SetCells("1", "U", "工龄股份");
oe.SetCells("1", "V", "总股份");
oe.SetCells("1", "W", "状态");
oe.SetCells("1", "X", "分红系数");
oe.SetCells("1", "Y", "分红金");

try
{
for (int i = 0; i <= ds.Tables["Allpeople"].Rows.Count - 1; i++)
{
int k = i + 2;

oe.SetCells(k.ToString(), "A", ds.Tables[0].Rows[i]["CradID"].ToString());
oe.SetCells(k.ToString(), "B", ds.Tables[0].Rows[i]["hukouid"].ToString());
oe.SetCells(k.ToString(), "C", ds.Tables[0].Rows[i]["Name"].ToString());
oe.SetCells(k.ToString(), "D", ds.Tables[0].Rows[i]["sex"].ToString());
oe.SetCells(k.ToString(), "E", ds.Tables[0].Rows[i]["Birthday"].ToString());
oe.SetCells(k.ToString(), "F", ds.Tables[0].Rows[i]["zzmm"].ToString());
oe.SetCells(k.ToString(), "G", ds.Tables[0].Rows[i]["papersID"].ToString());
oe.SetCells(k.ToString(), "H", ds.Tables[0].Rows[i]["sort"].ToString());
oe.SetCells(k.ToString(), "I", ds.Tables[0].Rows[i]["sortA"].ToString());
oe.SetCells(k.ToString(), "J", ds.Tables[0].Rows[i]["Address"].ToString());
oe.SetCells(k.ToString(), "K", ds.Tables[0].Rows[i]["jg"].ToString());
oe.SetCells(k.ToString(), "L", ds.Tables[0].Rows[i]["WorkAddress"].ToString());
oe.SetCells(k.ToString(), "M", ds.Tables[0].Rows[i]["Nation"].ToString());
oe.SetCells(k.ToString(), "N", ds.Tables[0].Rows[i]["whcd"].ToString());
oe.SetCells(k.ToString(), "O", ds.Tables[0].Rows[i]["hyzk"].ToString());
oe.SetCells(k.ToString(), "P", ds.Tables[0].Rows[i]["Relation"].ToString());
oe.SetCells(k.ToString(), "Q", ds.Tables[0].Rows[i]["Vocation"].ToString());
oe.SetCells(k.ToString(), "R", ds.Tables[0].Rows[i]["qianru"].ToString());
oe.SetCells(k.ToString(), "S", ds.Tables[0].Rows[i]["rsgf"].ToString());
oe.SetCells(k.ToString(), "T", ds.Tables[0].Rows[i]["gl"].ToString());
oe.SetCells(k.ToString(), "U", ds.Tables[0].Rows[i]["glgf"].ToString());
oe.SetCells(k.ToString(), "V", ds.Tables[0].Rows[i]["zgf"].ToString());
oe.SetCells(k.ToString(), "W", ds.Tables[0].Rows[i]["zhuangtai"].ToString());
oe.SetCells(k.ToString(), "X", ds.Tables[0].Rows[i]["xs"].ToString());
oe.SetCells(k.ToString(), "Y", ds.Tables[0].Rows[i]["fhj"].ToString());

}



}
catch (Exception ee)
{
throw ee;
}
finally
{
oe.SaveAs();
oe.CloseExcel();
OfficeExcel.CloseRun("EXCEL.EXE");
this.ReName(path);
// oe.outExcel();

}



}
}
catch (Exception ee)
{
//MessageBox.Show("倒出完成");
throw ee;
}
}

这是改名的 代码

private void ReName(string path)
{
string filename = Directory.GetParent(path).ToString();
string extName = path.Substring(path.LastIndexOf("."));
FileInfo info = new FileInfo(path);
string time = DateTime.Now.ToString("yyyy/MM/dd/hh/mm/ss");
info.MoveTo(filename + "/" + time + extName);
File.Delete(path);
}

这是 在别的类里 杀掉 进程的方法

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
public static void CloseRun(string CloseRunName)
{
//关闭某个指定的进程:
System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName(CloseRunName);
foreach (System.Diagnostics.Process p in process)
{
p.Kill();
}

}


public void CloseExcel()
{
IntPtr ptr = new IntPtr(excel.Hwnd);
int k = 0;
GetWindowThreadProcessId(ptr, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}







...全文
523 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyuebuyu 2010-05-14
  • 打赏
  • 举报
回复
OfficeExcel.CloseRun("EXCEL");
zzx509 2010-05-14
  • 打赏
  • 举报
回复
CloseRunName是怎么设定的,在CloseRun方法中MessageBox.Show一下,
看看运行时是否是正确的要杀掉的进程名。
lijianqiang2666 2010-05-14
  • 打赏
  • 举报
回复
问题是 我调试的时候 不错呀 我导了 4 5遍 没用 断开 就一直 走 都没事 可一运行 马上就 报错了 而且打包了在别的机器上 连进程都 杀不掉了 很是郁闷呀
lijianqiang2666 2010-05-14
  • 打赏
  • 举报
回复
可是我已经 把 excel 的进程都 杀了 而且 FileInfo 里没有关闭的 方法呀
lijianqiang2666 2010-05-14
  • 打赏
  • 举报
回复
string time = DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss");

文件名里不能包含"/"符号 dateTime 取出来的 这样的 2010-05-14-07-55- 没有斜杠的
xingyuebuyu 2010-05-14
  • 打赏
  • 举报
回复
H:\股份管理系统\股份管理系统\Form5.cs:行号 298

这个对应哪句代码?

string time = DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss");

文件名里不能包含"/"符号
wuyq11 2010-05-14
  • 打赏
  • 举报
回复
程序打开了文件,但是没有关闭文件流
多线程
lijianqiang2666 2010-05-14
  • 打赏
  • 举报
回复
怎么没有人 呀 自己顶呀 块来看看呀
lijianqiang2666 2010-05-14
  • 打赏
  • 举报
回复
execl 能导出来 可是 文件名该不了了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧