今天使用
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";就没有问题。所以考虑是该语句对文件路径参数长度有限制,超长产生的溢出导致了这个问题的出现。
当然这是个人的意见,希望和了解的朋友交流下。
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";就没有问题。所以考虑是该语句对文件路径参数长度有限制,超长产生的溢出导致了这个问题的出现。
当然这是个人的意见,希望和了解的朋友交流下。
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();
}
}
我只是利用这个方式打开文件为而已,如果用COM调用的话,打开的进程可能不能随excel文件的关闭正常退出!
OleDB没有使用过。
只能写成C:\\Docume~1\\或者外面加引号