Mega Code Archive

 
Categories / Delphi / Examples
 

Is it cprogram files or cprogra~1

Here's a way to convert between short 8.3 DOS file names and long file names. First function will convert long file names to the 8.3 format: // 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; Now a function to convert a short file name into a long file name: // 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; Let's give our functions a try: procedure test; const csTest = 'C:Program Files'; var sShort, sLong : string; begin sShort := GetShortName( csTest ); MessageDlg( 'Short name for "' + csTest + '" is "' + sShort + '"' , mtInformation, [mbOk], 0 ); sLong := GetLongName( sShort ); MessageDlg( 'Long name for "' + sShort + '" is "' + sLong + '"' , mtInformation, [mbOk], 0 ); end;