我使用 WinAPI 函数在 C# 中创建 OLE 文件。WinAPI 函数是:
[DllImport("ole32.dll")]
public static extern int OleCreateFromFile(
[In] ref Guid rclsid,
[MarshalAs(UnmanagedType.LPWStr)] string lpszFileName,
[In] ref Guid riid, uint renderopt,
[In] IntPtr pFormatEtc,
IOleClientSite pClientSite,
IStorage pStg,
[MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
我在 C# 应用程序中使用了这个函数,如下所示:
hResult = OleAPI.OleCreateFromFile(ref clsid,
sourceFileFullPath,
ref IID_IOleObject,
(uint)OLERENDER.OLERENDER_DRAW,
IntPtr.Zero,
pOleClientSite,
pStorage,
out pOleObjectOut);
该功能完美运行。但是当文件的文件名长度为 140 时,创建 OLE 文件失败。hResult 的返回值为 -2147467259。
sourceFileFullPath="C:\Users\Administrator\AppData\Local\Temp\TmpTzStore1\pju3wswj.jmq\000008F6\CalendarRepeddsfsfdsfsfat344Issue5sdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue50kb.
文件名 (CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendarRepeatIssue500kb.xlsx) 的长度为 140。
但是当我将文件名修剪为 120 时,它起作用了。
我想知道 OLE 文件的文件名长度是否有任何限制。因为我尝试了不同的应用程序文件(doc、docx、txt、pdf ...)。结果因文件而异。
我不知道这个 API 支持的确切文件名长度是多少。还是依赖于操作系统?我正在使用 Windows Server 2008。
谢谢普拉卡什