首页  编辑  

长文件名和短文件名的转换

Tags: /超级猛料/Stream.File.流、文件和目录/文件操作/   Date Created:

长文件名和短文件名的转换

// remove following two lines

// if already included

uses

 Windows, SysUtils;

function

 GetShortName( sLongName : string )

 : string;

var

 sShortName    : string;

 nShortNameLen : integer;

begin

 SetLength( sShortName,

            MAX_PATH );

 nShortNameLen :=

   GetShortPathName(

     PChar( sLongName ),

     PChar( sShortName ),

     MAX_PATH - 1 );

 if( 0 = nShortNameLen )then

 begin

   // handle errors...

 end;

 SetLength( sShortName,

            nShortNameLen );

 Result := sShortName;

end;

// remove following two lines

// if already included

uses

 Windows, SysUtils;

function

 __GetLongName(

   sShortName : string;

   var bError : boolean )

     : string;

var

 bAddSlash : boolean;

 SearchRec : TSearchRec;

 nStrLen   : integer;

begin

 bError    := False;

 Result    := sShortName;

 nStrLen   := Length( sShortName );

 bAddSlash := False;

 if( '\' = sShortName[ nStrLen ] )then

 begin

   bAddSlash := True;

   SetLength( sShortName,

     nStrLen - 1 );

   dec( nStrLen );

 end;

 if( ( nStrLen -

       Length( ExtractFileDrive(

         sShortName ) ) ) > 0 )then

 begin

   if( 0 = FindFirst(

             sShortName,

             faAnyFile,

             SearchRec ) )then

   begin

     Result := ExtractFilePath(

       sShortName ) + SearchRec.Name;

     if( bAddSlash )then

     begin

       Result := Result + '\';

     end;

   end else

   begin

     // handle errors...

     bError := True;

   end;

   FindClose( SearchRec );

 end;

end;

function

 GetLongName( sShortName : string )

 : string;

var

 s      : string;

 p      : integer;

 bError : boolean;

begin

 Result := sShortName;

 s := '';

 p := Pos( '\', sShortName );

 while( p > 0 )do

 begin

   s := __GetLongName( s +

         Copy( sShortName, 1, p ),

         bError );

   Delete( sShortName, 1, p );

   p := Pos( '\', sShortName );

   if( bError )then

     Exit;

 end;

 if( '' <> sShortName )then

 begin

   s := __GetLongName(

          s + sShortName, bError );

   if( bError )then

     Exit;

 end;

 Result := s;

end;