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\CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendar5sRepeatx"の値

ファイル名 (CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendarRepeatIssue500kb.xlsx) の長さは 140 です。

しかし、ファイル名を 120 にトリミングすると、機能しました。

OLE ファイルのファイル名の長さに制限があるかどうか知りたいです。さまざまなアプリケーションファイル(doc、docx、txt、pdf ...)で試したので。結果はファイルごとに異なりました。

この API がサポートする正確なファイル名の長さはわかりません。それともOS依存?Windows Server 2008 を使用しています。

ありがとうプラカシュ

4

1 に答える 1

0

パスを含む完全なファイル名の長さの最大ファイル名長は、 () 259 文字です。貼り付けたパスの長さは 216 文字なので、これは制限内のはずです。

MSDN ページに特定の最大長が記載されていないということは、259 文字が最大であることを意味します。

この不一致に関するドキュメントは見つかりませんでした。おそらく、1 つまたは複数のパスが、実際にはより長いパス名へのソフトリンクになっている可能性があります。

于 2010-10-25T12:21:06.427 に答える