Solved

Reading long firl names

Posted on 1998-09-29
2
196 Views
Last Modified: 2010-04-16
How can I get long names of files and directoriums of Windows 95. I am using Turbo Pascal 7.0. Can somebody help me and send me code?
0
Comment
Question by:mmilan
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 2

Expert Comment

by:omsec
ID: 1215712
sorry, can't give code, so this is only a commant:

Long file names are quite simple.  Windows simply creates multiple entries
for each file with a long name.  The entries are tagged with every
attribute, including (and this is the key) the volume attribute.  Windows
sees this, and chains the entries together to make one long file name.  The
only directory entry that doesn't have all the attributes set is the short
filename, which is the only one that makes any sense to DOS, so that's the
only one it displays when you type "dir"

0
 
LVL 5

Accepted Solution

by:
scrapdog earned 50 total points
ID: 1215713
This piece of code came from SWAG.  It works in TP 7.0
-------------------------------------------------------


{Here's my BP code for a little program that prints both the short and
long version of any longnamed file on C:.  it'll be pretty similar in Delphi,
if the INT 21 approach is what you're supposed to use in Win16.}


USES Strings;

type
  TSearchRec = record                    
    attr : longint;                      
    creation : comp;                    
    lastaccess : comp;                  
    lastmodification : comp;            
    highfilesize : longint;              
    lowfilesize : longint;              
    reserved : comp;                    
    name : array[0..259] of char;        
    shortname : array[0..13] of char;    
    handle : word;                      
  end;                                  

const                                    
  faReadOnly      =  $01;                
  faHidden        =  $02;
  faSysFile       =  $04;                
  faVolumeID      =  $08;
  faDirectory     =  $10;                
  faArchive       =  $20;                
  faAnyFile       =  $3F;                

function findfirst(filespec:string;attr:word;var S:TSearchRec):integer;  
begin                                                                    
  filespec := filespec + #0;                                            
  S.attr := attr;                                                        
  asm                                                                    
    push ds                                                              
    push ss                                                              
    pop ds                                                              
    lea dx,filespec+1                                                    
    les di,S
    mov ax,$714e                                                        
    mov cx,attr                                                          
    mov si,0
    int $21                                                              
    les di,S
    mov word ptr es:[di+TSearchRec.handle], ax                          
    jc @1                                                                
    xor ax,ax                                                            
  @1:                                                                    
    mov @result,ax                                                      
    pop ds                                                              
  end;                                                                  
end;                                                                    

                                                 
function FindNext(var S:TSearchRec):integer;    
begin                                            
  asm                                            
    mov ax,$714f
    mov si,0                                    
    les di,S                                    
    mov bx,word ptr es:[di+TSearchRec.Handle]
    int $21                                      
    jc @1
    xor ax,ax                                    
  @1:                                            
    mov @result,ax                              
  end;                                          
end;                                            
                                                 
function FindClose(var S:TSearchRec):integer;    
begin                                            
  asm                                            
    mov ax,$71a1                                
    les di,S                                    
    mov bx,word ptr es:[di+TSearchRec.Handle]    
    int $21                                      
    jc @1
    xor ax,ax                                                            
  @1:                                                                    
    mov @result,ax
  end;                                                                  
end;
                                                                         
procedure ShowLongNames(const path:string);                              
var                                                                      
  S : TSearchRec;                                                        
  Res : Integer;                                                        
begin                                                                    
  Res := findfirst(path+'\*.*',faAnyFile-faVolumeID,S);                  
  while Res = 0 do                                                      
  begin                                                                  
    with S do                                                            
    begin                                                                
      if (S.Attr and faDirectory) <> 0 then                              
      begin                                                              
        if (StrComp(Name,'.') <> 0) and (StrComp(Name,'..') <> 0) then
        begin                                                            
          if ShortName[0] <> #0 then                                    
            ShowLongNames(path+'\'+StrPas(ShortName))
          else                                                          
            ShowLongNames(path+'\'+StrPas(Name));
        end;                                                            
      end;                                                              
      if ShortName[0] <> #0 then                                        
        writeln('ren ',path+'\'+StrPas(ShortName),' "',name,'"');        
    end;                                                                
    Res := FindNext(S);                                                  
  end;                                                                  
  FindClose(S);                                                          
end;                                                                    
                                                                         
var                                                                      
  x : integer;                                                          
begin                                                                    
  showlongnames('D:');
end.
{written by Duncun Murdoch}

---------------------------------------

The showlongnames procedure prints out a list of all the files found on the path sent to it.  If you don't want to print it to the screen, all you have to do is alter the showlongnames procedure to fit your needs (i.e. pass it the first file back, pass all files back, etc.) Just look at how the procedure works and alter it accordingly.

Scrapdog
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Getting to know the threat landscape in which DDoS has evolved, and making the right choice to get ourselves geared up to defend against  DDoS attacks effectively. Get the necessary preparation works done and focus on Doing the First Things Right.
Why do some people recommend buying business VoIP from an ISP? What are the benefits to my company? What are the costs?
In this video, viewers are given an introduction to using the Windows 10 Snipping Tool, how to quickly locate it when it's needed and also how make it always available with a single click of a mouse button, by pinning it to the Desktop Task Bar. Int…
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…

632 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question