生成完整路径名的两种方法

    技术2026-06-21  16

    1.    GetCurrentDirectory 获取当前目录

    2.    GetModuleFileName 获取完整路径 + PathRemoveFileSpec 分离纯路径

    .386

    .model flat,stdcall

    option casemap:none

     

    include     windows.inc

    include     kernel32.inc

    include     user32.inc

    includelib kernel32.lib

    includelib user32.lib

    include     shlwapi.inc    ;PathRemoveFileSpec

    includelib shlwapi.lib

     

            .data

    hInstance          dd   ?

    szProfileName     db   MAX_PATH dup (?)

    szFileName        db   '/test.ini',0     ; 文件名里预含了 /

     

            .code

    start: invoke GetModuleHandle,NULL

         mov    hInstance,eax

          invoke GetCurrentDirectory,MAX_PATH,addr szProfileName   ; 方法一

         mov    edi,offset szProfileName

          invoke lstrlen,edi

          mov     ecx,offset szFileName          ;ini 文件名

          .if     byte ptr [edi+eax-1] == '/'   ; 当前路径的最后一个字符是 /

                   inc ecx                ; 是,则跳过 ini 文件名的 / ,防止生成两个 //

          .endif

          invoke lstrcat,edi,ecx         ; 连接组成完成路径名 ; 注意这种方法

           invoke MessageBox,NULL,edi,NULL,MB_OK

           

           invoke GetModuleFileName,NULL,addr szProfileName,MAX_PATH ; 方法二      

           invoke PathRemoveFileSpec,addr szProfileName

           mov    edi,offset szProfileName

           invoke lstrlen,edi

           mov    ecx,offset szFileName

           .if     byte ptr [edi+eax-1] == '/'

                   inc ecx

           .endif

          invoke lstrcat,edi,ecx

           invoke MessageBox,NULL,edi,NULL,MB_OK      

           invoke ExitProcess,NULL

           end start

    最新回复(0)