Esempio n. 1
0
/**
* ReadLocalDirectory
*
* Description: Read files folders from directory.
*
* Param: con - describes connection information
*        dir - path. 
*		 files - output list
*
* Return: bool - true. False if file does not exist, has not been read.
*/
bool CFtpManager::ReadLocalDirectory(CConnection * con, CString &dir, std::vector<CFileContainer> &files)
{
	bool result = true;
	if(con->host.GetLength() == 0)
	{
		return false;
	}

	if(dir.GetAt( dir.GetLength() - 1 ) != '/')
	{
		dir = dir + CString(_T("/"));
	}

	CString localStorePath;
	GetLocalStorePath(con, localStorePath);

	// Read files and folders in directory.
	localStorePath = localStorePath + CString(dir);
	localStorePath.Replace('/', '\\');
	CString localStoreSearchPath = CString(localStorePath + CString(_T("*.*")));
	/*
	CFileFind finder; 
	BOOL bWorking = finder.FindFile(localStoreSearchPath);
	while (bWorking)
	{
		bWorking = finder.FindNextFile();
		if(finder.IsDirectory())
		{
			CFileContainer f;
			f.dir = 1;
			f.name = finder.GetFileName(); //  .GetFileTitle();
			f.path = CString(dir); //finder.GetFilePath();
			f.localPath = CString(localStorePath);
			if(f.name.Trim().Compare(_T(".")) != 0 && f.name.Trim().Compare(_T("..")) != 0){
				//files.push_back(f);
			}
		} 
		// else sync local file
	}
	finder.Close();
	*/

	// Read file 
	CString dirContentFile(localStorePath + _T(".files.rftp"));

	//char nameBuffer[100];
	//sprintf(nameBuffer, "%S", dirContentFile); // CString to char *
	
	CFileStatus status;
	if(CFile::GetStatus(dirContentFile, status))
	{
		CStdioFile file (dirContentFile, CStdioFile::modeRead | CFile::shareDenyNone);
		CString buffer;
		//CString string;
		while (file.ReadString(buffer))
		{
			CXml xml;

			CString type(_T(""));
			xml.GetTag(buffer, CString(_T("t")), type);
			bool isDir = false;
			if(type.Compare(_T("d")) == 0){
				isDir = true;
			}
			

			CString fileName(_T(""));
			xml.GetTag(buffer, CString(_T("n")), fileName);

			
			// size
			long size = 0;
			CString fileSize(_T(""));
			if(xml.GetTag(buffer, CString(_T("s")), fileSize)){
				fileSize = fileSize.Trim();
				if(fileSize.GetLength() > 0){
					size = _wtol(fileSize);
				}
			}

			// Date
			CString fileDate(_T(""));
			xml.GetTag(buffer, CString(_T("d")), fileDate);	
			fileDate = fileDate.Trim();
			

			// permissions
			CString filePermissions(_T(""));
			xml.GetTag(buffer, CString(_T("p")), filePermissions);	
			filePermissions = filePermissions.Trim();

			//TRACE1(" line: %s \n", buffer);
			CFileContainer f;
			if(isDir){
				f.dir = 1;
			} else {
				f.dir = 0;
			}
			f.name = fileName; 
			f.path = CString(dir); 
			f.localPath = CString(localStorePath);
			f.size = size;
			f.remoteDate = CString(fileDate);
			f.host = CString(con->host);
			//TRACE1("filePermissions %s \n " , filePermissions);
			f.permissions = CString(filePermissions);
			
			if(f.name.Trim().Compare(_T(".")) != 0 && f.name.Trim().Compare(_T("..")) != 0 ){
				int i = 0;
				files.push_back(f);
			}
		}
	} 
	else 
	{
		// Directory not read.
		//GetFtpDirectory(con, dir, NULL);
		TRACE1(" ReadLocalDirectory not found: %s \n", dir);
		result = false;
	}
	return result;
}
Esempio n. 2
0
/** Creates the \c ls command result 
  *
  * It creates it in the packetData string.
  *
  */
void RainbruRPG::Network::Ftp::FtpTransfer::lsResult(){
  LOGI("LIST command result :");
  packetData="";
  unsigned int childs=1;

  QDir dir(currentDirectory );
  dir.setFilter(QDir::Dirs| QDir::Files| QDir::NoSymLinks);
  dir.setSorting(QDir::Name);

  QFileInfoList list = dir.entryInfoList();

  LOGCATS("Sending ");
  LOGCATI(list.size());
  LOGCATS(" files.");
  LOGCAT();

  for (int i = 0; i < list.size(); ++i) {
    QFileInfo fileInfo = list.at(i);

    // ====== User permissions
    // Diretory ?
    if (fileInfo.isDir()){
      packetData+="d";

      QDir dir2(fileInfo.absoluteFilePath());
      childs=dir2.count();

    }
    else{
      packetData+="-";
      childs=1;
    }

    packetData+=filePermissions(fileInfo.isReadable(),fileInfo.isWritable(),
				fileInfo.isExecutable());

    packetData+=filePermissions(fileInfo.permission(QFile::ReadGroup),
				fileInfo.permission(QFile::WriteGroup),
				fileInfo.permission(QFile::ExeGroup));

    packetData+=filePermissions(fileInfo.permission(QFile::ReadOther),
				fileInfo.permission(QFile::WriteOther),
				fileInfo.permission(QFile::ExeOther));

    // Child number
    QString sChild;
    sChild.setNum(childs);
    sChild=sChild.rightJustified(5);
    packetData+=sChild;

    // Owner and group names
    packetData+=' ';
    QString sOwner=fileInfo.owner();
    sOwner=sOwner.leftJustified(9);
    packetData+=sOwner;
    QString sGroup=fileInfo.group();
    sGroup=sGroup.leftJustified(9);
    packetData+=sGroup;

    // File size
    qint64 size=fileInfo.size();

    QString sSize=fileSizeToString(size);
    sSize=sSize.rightJustified(8);
    packetData+=sSize;

    // Last modified time
    packetData+=" ";
    QDateTime dt=fileInfo.lastModified();
    packetData+=dt.toString("yyyy-MM-dd hh:mm");

    // File name and EOL
    packetData+=" ";
    packetData+=fileInfo.fileName();
    packetData+="\n";
  }
  LOGI("PacketData done. LIST result can be sent");
  int i=  packetData.size();
  LOGCATS("PacketData lenght :");
  LOGCATI(i);
  LOGCAT();
}