今天使用
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";就没有问题。所以考虑是该语句对文件路径参数长度有限制,超长产生的溢出导致了这个问题的出现。
当然这是个人的意见,希望和了解的朋友交流下。

解决方案 »

  1.   

    fileName="C:\\Docume~1\\QianFang\\桌面\\test\\标准框接件单\\HYB11911-HYB11911.xls";看看。
      

  2.   

    不能直接excel.exe,要指定路径,要么你干脆System.Diagnostics.Process.Start("C:\\Documents and Settings\\QianFang\\桌面\\test\\标准框接件单\\HYB11911-HYB11911.xls")试试。其实我不明白,这种情况为什么不适用VSTO或者OleDB?
      

  3.   

    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();
                }
            }
      

  4.   


    我只是利用这个方式打开文件为而已,如果用COM调用的话,打开的进程可能不能随excel文件的关闭正常退出!
    OleDB没有使用过。
      

  5.   

    想dos下,路径不能这样写 C:\\Documents and Settings\\
    只能写成C:\\Docume~1\\或者外面加引号