2

我使用 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。

谢谢普拉卡什

4

1 回答 1

0

完整文件名长度(包括路径)的最大文件名长度为()259 个字符。您粘贴的路径长度为 216 个字符,因此应该在限制范围内。

MSDN 页面没有描述特定的最大长度意味着 259 个字符应该是最大值。

我找不到有关此差异的任何文档。也许您的一个或多个路径是指向实际上更长的路径名称的软链接。

于 2010-10-25T12:21:06.427 回答