2010-10-25 48 views
2

我使用WinAPI函數在C#中創建OLE文件。該WinAPI的功能是:C#:OLE文件的最大文件名長度

[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:\用戶\管理員\應用程序數據\本地\ TEMP \ TmpTzStore1 \ pju3wswj.jmq \ 000008F6 \ CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendarRepeatIssue500kb.xlsx」

文件名的長度(CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendarRepeatIssue500kb.xlsx)是140.

但是,當我將文件名修剪爲120時,它工作。

我想知道OLE文件的文件名長度是否有限制。 因爲我嘗試了不同的應用程序文件(doc,docx,txt,pdf ...)。結果因不同文件而異。

我不知道這個API支持的文件名的長度是多少。或者它依賴於操作系統?我使用Windows Server 2008的

感謝 普拉卡什

+0

http://stackoverflow.com/questions/265769/maximum-filename-length-in-ntfs-xp-and-vista – Aliostad 2010-10-25 12:10:27

回答

0

完整文件名長度,包括路徑的最大文件名長度,是(about)259個字符。你粘貼的路徑長度是216個字符,所以這應該在限制之下。

MSDNpages沒有描述特定的最大長度意味着259個字符應該是最大的。

我找不到有關這種差異的任何文檔。也許一個或多個路徑是實際上更長的路徑名稱的軟鏈接。

+0

發生了令人驚異的事情。當我使用只有字母字符但長度爲140的文件名時,它才起作用。 – Prakash 2010-10-25 12:53:13

+0

你開玩笑吧!你的意思是隻有A到Z? – 2010-10-25 13:03:54

+0

是的。我只使用了A,B和C.其文件名是ABCABCABCABCABABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC.xlsx – Prakash 2010-10-26 03:55:44