关于System.Diagnostics.Process.Start("excel.exe",string fileName)的问题

lonely00 2011-03-09 07:17:32
今天使用
System.Diagnostics.Process.Start("excel.exe",string fileName);

来打开一个自动生成好的表格文件,发现一个怪异的问题,好像该语句对fileName的长度是有限制的.
例如,使用
fileName="C:\\Documents and Settings\\QianFang\\桌面\\test\\标准框接件单\\HYB11911-HYB11911.xls";

系统就要报错,excel.exe找不到文件,
提示是:
无法找到“C:\Documents.xls”。(后面语言省略)
无法找到“and.xls”。(后面语言省略)
无法找到“Settings\QianFang\桌面\test\标准框接件单\HYB11911-HYB11911.xls”。(后面语言省略)

而如果使用
fileName="D:\\test\\标准框接件单\\HYB11911-HYB11911.xls";


就没有问题。所以考虑是该语句对文件路径参数长度有限制,超长产生的溢出导致了这个问题的出现。
当然这是个人的意见,希望和了解的朋友交流下。
...全文
446 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bianhaohui 2011-05-25
  • 打赏
  • 举报
回复
100%是路径含空格。
kissrainy 2011-03-14
  • 打赏
  • 举报
回复
路径里的文件名 不能有空格,就是不能把文件 放在 文件夹名有空格的文件夹里
feixuyue 2011-03-13
  • 打赏
  • 举报
回复
想dos下,路径不能这样写 C:\\Documents and Settings\\
只能写成C:\\Docume~1\\或者外面加引号
xu56180825 2011-03-13
  • 打赏
  • 举报
回复
这个主要问题是他不是可执行文件你当然打不开咯!
lonely00 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sugarforever 的回复:]
根据我的理解,应该是路径中空格的问题吧。可以在路径前后用"号括起来试试
[/Quote]

你这句话我没听懂,能不能说具体点呢?
sugarforever 2011-03-09
  • 打赏
  • 举报
回复
根据我的理解,应该是路径中空格的问题吧。可以在路径前后用"号括起来试试
lonely00 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]

检查路径是否正确,检查每个字母。
[/Quote]

没有问题的,正如我帖子说的,如果把路径的长度缩短,就完全没问题了哈!
lonely00 2011-03-09
  • 打赏
  • 举报
回复

我只是利用这个方式打开文件为而已,如果用COM调用的话,打开的进程可能不能随excel文件的关闭正常退出!
OleDB没有使用过。
xingyuebuyu 2011-03-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/jackwuwei/archive/2010/03/06/5351542.aspx

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName
(
[MarshalAs(UnmanagedType.LPTStr)] string path,
[MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath,
int shortPathLength
);

private void Form1_Load(object sender, EventArgs e)
{
string fileName = @"D:\安装程序\Image_Pan_and_Zoom\bin\Debug\ImageZoom.exe";
if (System.IO.File.Exists(fileName))
{
StringBuilder sb = new StringBuilder(2048);
int ret = GetShortPathName(fileName, sb, sb.Capacity);
fileName = sb.ToString();
}
}


周公 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 lonely00 的回复:]
今天使用

C# code
System.Diagnostics.Process.Start("excel.exe",string fileName);

来打开一个自动生成好的表格文件,发现一个怪异的问题,好像该语句对fileName的长度是有限制的.
例如,使用

C# code
fileName="C:\\Documents and Settings\\QianFang\\……
[/Quote]
不能直接excel.exe,要指定路径,要么你干脆System.Diagnostics.Process.Start("C:\\Documents and Settings\\QianFang\\桌面\\test\\标准框接件单\\HYB11911-HYB11911.xls")试试。

其实我不明白,这种情况为什么不适用VSTO或者OleDB?
threenewbee 2011-03-09
  • 打赏
  • 举报
回复
检查路径是否正确,检查每个字母。
threenewbee 2011-03-09
  • 打赏
  • 举报
回复
fileName="C:\\Docume~1\\QianFang\\桌面\\test\\标准框接件单\\HYB11911-HYB11911.xls";

看看。

111,090

社区成员

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

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

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