home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 31 / CDASC_31_1996_juillet_aout.iso / internet / rnr214.zip / RNRFILE.PAS < prev    next >
Pascal/Delphi Source File  |  1996-01-21  |  3KB  |  181 lines

  1. unit rnrfile;
  2.  
  3. {
  4.  
  5. rnrfile.pas - rnr file procedures
  6.  
  7. }
  8.  
  9. { split off from the file:  rnrproc.pas - rnr procedures }
  10.  
  11. {$I rnr-def.pas}
  12.  
  13. interface
  14.  
  15. uses dos,rnrglob,genericf { ,rnrfunc,rnrio,rnrproc,rnrmous } ;
  16.  
  17. procedure mkhier(hier: string);
  18. procedure copyfile(oldfn,newfn: string);
  19. procedure deletefile(fn: string);
  20. procedure emptyfile(fn: string);
  21. procedure movefile(oldfn,newfn: string);
  22. procedure copyfilethenempty(oldfn,newfn: string);
  23. procedure safereset(var f: text; fn: string);
  24. procedure saferesetsize(var f: file; fn: string; size: integer);
  25. procedure saferewrite(var f: text; fn: string);
  26.  
  27. implementation
  28.  
  29. procedure mkhier;
  30.  
  31. var
  32.   s: string;
  33.   i: integer;
  34.   fileinfo: searchrec;
  35.   dir: string;
  36.  
  37. begin
  38.  
  39. {$I-}
  40.  
  41. {if the directory already exists, don't worry about an error}
  42.  
  43. {WHY DOESN'T THIS WORK WITH TP6 ?!?!?!}
  44.  
  45.   s := hier;
  46.  
  47.   for i := 1 to length(s) do
  48.     if s[i]='/' then
  49.       s[i] := '\';
  50.  
  51.   if length(s)>0 then
  52.     if s[length(s)]='\' then
  53.       s := copy(s,1,length(s)-1);
  54.  
  55.   for i := 2 to length(s) do
  56.     if (s[i]='\') and (s[i-1]<>':') then
  57.       begin
  58.         dir := copy(s,1,i-1);
  59.         findfirst(dir,directory,fileinfo);
  60.         if doserror<>0 then
  61.           mkdir(dir);
  62.       end;
  63.  
  64.   findfirst(s,directory,fileinfo);
  65.   if doserror<>0 then
  66.     mkdir(s);
  67.  
  68. {$I+}
  69.  
  70. end;
  71.  
  72. procedure copyfile;
  73.  
  74. const
  75.   bufsize=1024;
  76.  
  77. var
  78.   infile, outfile: file;
  79.   done: boolean;
  80.   numread: word;
  81.   buffer: array[1..bufsize] of char;
  82.  
  83. begin
  84.   assign(outfile,newfn);
  85.   rewrite(outfile,1);
  86.  
  87.   assign(infile,oldfn);
  88.   reset(infile,1);
  89.  
  90.   done := false;
  91.   while not done do
  92.     begin
  93.       blockread(infile,buffer,bufsize,numread);
  94.       blockwrite(outfile,buffer,numread);
  95.       done := (numread<bufsize);
  96.     end;
  97.  
  98.   close(infile);
  99.   close(outfile);
  100. end;
  101.  
  102. procedure deletefile;
  103.  
  104. var
  105.   f: file;
  106.  
  107. begin
  108.   assign(f,fn);
  109.   erase(f);
  110. end;
  111.  
  112. procedure emptyfile;
  113.  
  114. var
  115.   f: file;
  116.  
  117. begin
  118.   assign(f,fn);
  119.   rewrite(f);
  120.   close(f);
  121. end;
  122.  
  123. procedure movefile;
  124.  
  125. begin
  126.   copyfile(oldfn,newfn);
  127.   deletefile(oldfn);
  128. end;
  129.  
  130. procedure copyfilethenempty;
  131.  
  132. begin
  133.   copyfile(oldfn,newfn);
  134.   emptyfile(oldfn);
  135. end;
  136.  
  137. procedure safereset;
  138.  
  139. {no device checking done yet, since no reset routines need it}
  140.  
  141. begin
  142.   assign(f,fn);
  143. {$I-}
  144.   reset(f);
  145. {$I+}
  146.   fileresult := ioresult;
  147. end;
  148.  
  149. procedure saferesetsize;
  150.  
  151. {no device checking done yet, since no reset routines need it}
  152.  
  153. begin
  154.   assign(f,fn);
  155. {$I-}
  156.   reset(f,size);
  157. {$I+}
  158.   fileresult := ioresult;
  159. end;
  160.  
  161. procedure saferewrite;
  162.  
  163. {make sure it's not a device first}
  164.  
  165. begin
  166.   if isdev(fn) then
  167.     begin
  168.       fileresult := 199;  {use an error code tpascal doesn't}
  169.     end
  170.   else
  171.     begin
  172.       assign(f,fn);
  173. {$I-}
  174.       rewrite(f);
  175. {$I+}
  176.       fileresult := ioresult;
  177.     end;
  178. end;
  179.  
  180. end.
  181.