home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pcmagazi / 1992 / 04 / file.cpp < prev    next >
C/C++ Source or Header  |  1992-02-05  |  4KB  |  225 lines

  1. // file.cpp
  2.  
  3. #include"file.h"
  4. #include<malloc.h>
  5. #include<memory.h>
  6.  
  7. int File::Copy(char *destination)
  8.     {
  9.     int retval = 0;
  10.  
  11. //#if defined(NOTYET)
  12.     if(!destination || !*destination)
  13.         return 1;
  14.  
  15. //   char *buffer = (char *) malloc(MAXBUF);
  16.     char *buffer = new char[MAXBUF];
  17.     if(!buffer)
  18.         return 1;
  19.  
  20.     File oldf(name);
  21.     File newf(destination);
  22.  
  23.     if(!oldf.Open("rb") || !newf.Open("wb")) 
  24.         {
  25.         delete buffer;
  26.         cout << "Unable to open source or destination file\n";
  27.         return 1;
  28.         }
  29.  
  30.     int num;
  31.     while(num = oldf.Read(MAXBUF,buffer))
  32.         newf.Write(num,buffer);
  33.     newf.Close();
  34.     oldf.Close();
  35. //#endif
  36.   delete buffer;
  37. //    free(buffer);
  38.     return retval;
  39.     }
  40.  
  41. int File::ReadAt(long offset, int size, void *buf)
  42.     {
  43.     if(!Offset(offset))
  44.         return Read(size,buf);
  45.     return 0;
  46.     }
  47.  
  48. int File::Read(int size,void *buf)
  49.     {
  50.     return fread(buf,1,size,fp);
  51.     }
  52.  
  53. int File::_fRead(int size, void far *farbuf, char *nearbuf)
  54.     {
  55.     if(!nearbuf)
  56.         return 0;
  57.     int bytesread = Read(size,nearbuf);
  58.     _fmemcpy(farbuf,nearbuf,bytesread);
  59.     return bytesread;
  60.     }
  61.  
  62. int File::WriteAt(long offset, int size, void *buf)
  63.     {
  64.     if(!Offset(offset))
  65.         return Write(size, buf);
  66.     return 0;
  67.     }
  68.  
  69. int File::Write(int size, void *buf)
  70.     {
  71.     return fwrite(buf,1,size,fp);
  72.     }
  73.  
  74. int File::_fWrite(int size, void far *farbuf, char *nearbuf)
  75.     {
  76.     if(!nearbuf)
  77.         return 0;
  78.     _fmemcpy(nearbuf,farbuf,size);
  79.     int byteswritten = Write(size,nearbuf);
  80.     return byteswritten;
  81.     }
  82.  
  83. int File::Move(char *movedir)
  84.     {
  85.     if(!movedir || !*movedir)
  86.         return 1;
  87.  
  88.     char *p;
  89.     char *newname = NULL;
  90.  
  91.     if(p = strrchr(name,'\\'))
  92.         p++;
  93.     else
  94.         p = name;
  95.     newname = new char[strlen(movedir)+strlen(p)+2];
  96.     strcpy(newname,movedir);
  97.     strcat(newname,"\\");
  98.     strcat(newname,p);
  99.  
  100.     int isopen = FALSE;
  101.     char *oldmode;
  102.     if(fp)
  103.         {
  104.         isopen = TRUE;
  105.         oldmode = new char[strlen(mode)+1];
  106.         strcpy(oldmode,mode);
  107.         }
  108.  
  109.     Close();
  110.  
  111.     int retval;
  112.     if(retval = rename(name,newname))  // fall thru to no more
  113.         {
  114.         printf("Unable to rename %s to %s...press <RETURN>\n",
  115.             name,newname);
  116.         char c;
  117.         cin >> c;
  118.         }
  119.     else
  120.         SetName(newname);
  121.     if(isopen)
  122.         {
  123.         Open(oldmode);
  124.         delete oldmode;
  125.         }
  126.     if(newname)
  127.         delete newname;
  128.     return retval;
  129.     }
  130.  
  131. long File::Size(void)
  132.     {
  133.     if(fp)
  134.         return filelength(fileno(fp));
  135.     FindFile f(name,ALL_FILES);
  136.     if(f.Found())
  137.         return f.Size();
  138.     return 0L;
  139.     }
  140.  
  141. int File::Delete(void)
  142.     {
  143.     if(fp)
  144.         Close();
  145.     return remove(name);
  146.     }
  147.  
  148. char *File::GetLine(void)
  149.     {
  150.     InitLineBuffer();
  151.     return fgets(linebuffer,linelen-1,fp);
  152.     }
  153.  
  154. void File::Close(void)             
  155.     {   
  156.     if(fp)
  157.         {
  158.         fclose(fp);
  159.         fp = NULL;
  160.         }
  161.     }
  162.  
  163. int File::Open(char *m)
  164.     {
  165.     if(!name)
  166.         return FALSE;
  167.     strcpy(mode,m);
  168.     if(!(fp = fopen(name,mode)))
  169.         return FALSE;
  170.     return TRUE;
  171.     }
  172.  
  173. void File::SetName(char *newname)    
  174.     {
  175.     if(name)
  176.         delete name;
  177.     name = new char[strlen(newname)+1];
  178.     strcpy(name,newname);
  179.     }
  180.  
  181. File::~File(void)
  182.     {
  183.     Close();
  184.     if(linebuffer)
  185.         {
  186.         delete linebuffer;
  187.         linebuffer = NULL;
  188.         }
  189.     if(name)
  190.         {
  191.         delete name;
  192.         name = NULL;
  193.         }
  194.     }
  195.  
  196. File::File(char *newname)         
  197.     {   
  198.     Init();
  199.     SetName(newname);   
  200.     }
  201.  
  202. void File::Init(void)
  203.     {
  204.     linelen = DEFAULTLINELEN;
  205.     linebuffer  = NULL;
  206.     fp = NULL;
  207.     name = NULL;
  208.     MAXBUF = 20000;
  209.     *mode = NULL;
  210.     }
  211.  
  212. void File::InitLineBuffer(void)
  213.     {
  214.     if(!linebuffer)
  215.         linebuffer = new char[linelen];
  216.     }
  217.  
  218. void File::SetLineBuffer(void)
  219.     {
  220.     if(linebuffer)
  221.         delete linebuffer;
  222.     linebuffer = NULL;
  223.     InitLineBuffer();
  224.     }
  225.