예제 #1
0
bool C_dir::RemoveDirectory(const wchar *path, bool recursively){

   bool ok = true;
   if(recursively){
      C_dir d;
      if(d.ScanBegin(path)){
         while(true){
            dword atts;
            const wchar *wp = d.ScanGet(&atts);
            if(!wp)
               break;
            Cstr_w fn; fn<<path <<'\\' <<wp;
            if(atts&C_file::ATT_DIRECTORY)
               ok = (RemoveDirectory(fn, true) && ok);
            else
               ok = (C_file::DeleteFile(fn) && ok);
         }
         d.ScanEnd();
      }
   }
   Cstr_w dirw;
   C_file::GetFullPath(path, dirw);

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   TFileName n;
   n.Copy(TPtrC((word*)(const wchar*)dirw, dirw.Length()));
   if(n[n.Length()-1]!='\\')
      n.Append('\\');
   ok = (fs.RmDir(n)==KErrNone && ok);
   CloseFileSession(file_session);
   return ok;
}
예제 #2
0
bool C_dir::GetDriveSpace(char drive_letter, S_size *total, S_size *free){

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   TVolumeInfo vi;
   int err = fs.Volume(vi, ToLower(drive_letter)-'a');
   CloseFileSession(file_session);
   if(err)
      return false;
#ifndef __SYMBIAN_3RD__
   if(free){
      free->lo = vi.iFree.Low();
      free->hi = vi.iFree.High();
   }
   if(total){
      total->lo = vi.iSize.Low();
      total->hi = vi.iSize.High();
   }
#else
   if(free){
      free->lo = vi.iFree;
      free->hi = vi.iFree>>32;
   }
   if(total){
      total->lo = vi.iSize;
      total->hi = vi.iSize>>32;
   }
#endif
   return true;
}
예제 #3
0
//----------------------------------------------------------------------------------------
LOCAL_C void doMainL()
//----------------------------------------------------------------------------------------
	{
	TInt testNumber = 1;

	OpenFileSession();
	InitTestUtils();

	__UHEAP_MARK;
	DumpBifFiles(testNumber++);
	//gTest.Printf(_L("Hit a key to continue..."));
	//gTest.Getch();

	TestAPIs(testNumber++);
	//gTest.Printf(_L("Hit a key to continue..."));
	//gTest.Getch();

	DumpWapBifFiles(testNumber++);
	//gTest.Printf(_L("Hit a key to continue..."));
	//gTest.Getch();
	
	CheckBioness(testNumber++);
	//gTest.Printf(_L("Hit a key to continue..."));
	//gTest.Getch();

	DefaultSendBearer(testNumber++);
	//gTest.Printf(_L("Hit a key to continue..."));
	//gTest.Getch();

	__UHEAP_MARKEND;
	CloseFileSession();
	CloseTestUtils();
	}
예제 #4
0
bool C_dir::GetDriveName(char drive_letter, Cstr_w &name){

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   /*
   TBuf16<128> dname;
   if(fs.GetDriveName(ToLower(drive_letter)-'a', dname))
      return false;
   name = (wchar*)dname.PtrZ();
   */
   TVolumeInfo vi;
   if(fs.Volume(vi, ToLower(drive_letter)-'a')){
      CloseFileSession(file_session);
      return false;
   }
   CloseFileSession(file_session);
   name.Allocate((const wchar*)vi.iName.Ptr(), vi.iName.Length());
   return true;
}
예제 #5
0
//----------------------------
   ~C_file_read_zip(){
      if(!arch_file){
#ifdef SYMBIAN_OPTIM
         file.Close();
         CloseFileSession(file_session);
#else
         ck.Close();
#endif
      }
      inflateEnd(&d_stream);
   }
예제 #6
0
bool C_dir::MakeDirectory(const wchar *path, bool success_if_exists){

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   TFileName n;
   n.Copy(TPtrC((word*)path, StrLen(path)));
   if(n[n.Length()-1]!='\\')
      n.Append('\\');
   int err = fs.MkDir(n);
   CloseFileSession(file_session);
   if(success_if_exists && err==KErrAlreadyExists)
      return true;
   return (err==KErrNone);
}
예제 #7
0
static dword GetDriveMask(){

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   TDriveList dl;
   dword mask = 0;
   if(!fs.DriveList(dl)){
      for(int i=0; i<KMaxDrives; i++){
         if(dl[i])
            mask |= 1<<i;
      }
   }
   CloseFileSession(file_session);
   return mask;
}
예제 #8
0
C_dir::E_DRIVE_TYPE C_dir::GetDriveType(char drive_letter){

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   TDriveInfo di;
   int err = fs.Drive(di, ToLower(drive_letter)-'a');
   CloseFileSession(file_session);
   if(err)
      return DRIVE_ERROR;

   switch(di.iType){
   case EMediaNotPresent: return DRIVE_ERROR;
   case EMediaCdRom: return DRIVE_READ_ONLY;
   case EMediaRom: return DRIVE_ROM;
   case EMediaRam: return DRIVE_RAMDISK;
   //case EMediaHardDisk: return DRIVE_HARD_DISK;  //not working
   case EMediaRemote: return DRIVE_REMOTE;
   }
   if(di.iDriveAtt&KDriveAttRemovable)
      return DRIVE_REMOVABLE;
   return DRIVE_NORMAL;
}
예제 #9
0
bool C_dir::ScanBegin(const wchar *dir){

   ScanEnd();
   S_scan_data *sd = new(true) S_scan_data;
   find_data = sd;

   Cstr_w dirw = dir;
   //C_file::GetFullPath(dir, dirw);
   if(dirw.Length() && dirw[dirw.Length()-1]!='\\')
      dirw<<'\\';
   TPtrC fptr((word*)(const wchar*)dirw, dirw.Length());

   RFs file_session;
   RFs &fs = InitFileSession(file_session);
   int err = fs.GetDir(fptr, KEntryAttHidden | KEntryAttSystem | KEntryAttDir, ESortNone, sd->list);
   CloseFileSession(file_session);
   if(err || !sd->list || !sd->list->Count()){
      ScanEnd();
      return false;
   }
   sd->count = sd->list->Count();
   return true;
}