精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
近期开发要实现另存为功能,存到一个目录下一系列文件。把目录设置到C盘根目录,不报异常。但是把目录设置到Windows临时目录步报错。代码如下:
Microsoft.Office.Interop.PowerPoint.Application pptApp = new Microsoft.Office.Interop.PowerPoint.Application(); Microsoft.Office.Interop.PowerPoint.Presentation pp = pptApp.Presentations.Open( openFileDialog1.FileName,Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse,Microsoft.Office.Core.MsoTriState.msoFalse); string sdir=Environment.GetEnvironmentVariable("TEMP")+"\\"+DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss")+"\\t1"; pp.SaveAs(sdir , PpSaveAsFileType.ppSaveAsJPG, Microsoft.Office.Core.MsoTriState.msoTrue); pp.Close();
上面代码SaveAs函数第一个参数在以前是一个固定的字符串,比如“C:\\t1”,这时候不报错。后来换成,如上的代码就报无效路径问题。截图如下:
详细的文本如下:
“System.Runtime.InteropServices.COMException”类型的未经处理的异常出现在 BoardBase.dll 中。
其他信息: Presentation (unknown member) : C:\Users\ADMINI~1\AppData\Local\Temp\2016-03-14 20-25-15\t1 文件路径或名称无效。请检查路径和文件名是否正确。
SaveAs第一种调用可以,第二种调用不行。怎么办?
怀疑底层的问题,让别人来解决问题不可能。哪只有自己发动了,这里唯一的改变就是新目录出现的位置不一样,我灵机一动,为什么不用代码主动创建新目录呢!
用这样的代码行创建目录, Directory.CreateDirectory(sdir); 把此行代码放在SaveAs函数调用行前,问题解决。
这问题肯定和SaveAs函数的底层执行有关系,在某些容易的环境下,它执行通过,在复杂的环境下,它想省事,结果就报错了。