⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kfileinfo.cpp

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CPP
字号:
// -*- c++ -*-/* This file is part of the KDE libraries    Copyright (C) 1997, 1998 Richard Moore <rich@kde.org>                  1998 Stephan Kulow <coolo@kde.org>                  1998 Daniel Grana <grana@ie.iwi.unibe.ch>    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Library General Public License for more details.    You should have received a copy of the GNU Library General Public License    along with this library; see the file COPYING.LIB.  If not, write to    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,    Boston, MA 02111-1307, USA.*/// $Id: kfileinfo.cpp,v 1.1 2003/09/08 19:42:13 jasonk Exp $#include "kfileinfo.h"#include <sys/types.h>#include <dirent.h>#include <grp.h>#include <sys/stat.h>#include <pwd.h>#include <unistd.h>#include <time.h>#include <qfileinfo.h>#include <qregexp.h>#include <kapp.h>#include <kfm.h>KFileInfo::KFileInfo(const KDirEntry &e){    myName= e.name;    myName.replace( QRegExp("/$"), "" );    mySize= e.size;    myBaseURL= "";    myDate= e.date;    myOwner= e.owner;    myGroup= e.group;    myAccess= e.access;    parsePermissions(e.access);    myIsSymLink = false;}KFileInfo::KFileInfo(const QFileInfo &e){    myName = e.fileName();    mySize = e.size();    myBaseURL = "";    myDate= (e.lastModified()).toString();    myOwner = e.owner();    myGroup = e.group();    myIsDir = e.isDir();    myIsFile = e.isFile();    myIsSymLink = e.isSymLink();    myPermissions = 755;}KFileInfo::KFileInfo(const char *dir, const char *name){    myName = name;    myBaseURL = dir;    struct stat buf;    myIsSymLink = false;    if (lstat((dir + myName).data(), &buf) == 0) {	myIsDir = (buf.st_mode & S_IFDIR) != 0;        // check if this is a symlink to a directory	if (S_ISLNK(buf.st_mode)) {	  myIsSymLink = true;	  struct stat st;	  if (stat((dir + myName).data(), &st) == 0)	      myIsDir = S_ISDIR(st.st_mode) != 0;	  else	      myName = ""; // indicate, that the link is broken	} else	    myIsSymLink = false;	myDate = dateTime(buf.st_mtime);	mySize = buf.st_size;	myIsFile = !myIsDir;	struct passwd *pw = getpwuid(buf.st_uid);	struct group * ge = getgrgid( buf.st_gid );	if (pw)	    myOwner = pw->pw_name;	else	    myOwner = i18n("unknown");	if (ge)	    myGroup = ge->gr_name;	else	    myGroup = i18n("unknown");	myPermissions = buf.st_mode;	parsePermissions(myPermissions);	// myDate = buf.st_mtime;	    } else {	// default	debug("the file does not exist %s%s",dir, name);	myName.insert(0, "?");	mySize = 0;	myIsFile = false;	myIsDir = false;	myPermissions = 0;	parsePermissions(myPermissions);    }}// KFileInfo::~KFileInfo()// {//     debug("~KFileInfo");// }KFileInfo &KFileInfo::operator=(const KFileInfo &i){    myName= i.myName;    mySize= i.mySize;    myBaseURL= i.myBaseURL;    myDate= i.myDate;    myOwner= i.myOwner;    myGroup= i.myGroup;    myIsDir= i.myIsDir;    myPermissions= i.myPermissions;    return *this;}bool KFileInfo::isReadable() const{    return (::access(myBaseURL + myName, R_OK | (myIsDir ? X_OK : 0)) == 0) ;}void KFileInfo::parsePermissions(const char *perms){    myPermissions = 0;    char p[11] = {0, 0, 0, 0, 0,		  0, 0, 0, 0, 0,		  0};    strncpy(p, perms, sizeof(p));    myIsDir = (bool)(p[0] == 'd');    myIsSymLink = (bool)(p[0] == 'l');    myIsFile = !myIsDir;    if(p[1] == 'r')      myPermissions |= QFileInfo::ReadUser;    if(p[2] == 'w')      myPermissions |= QFileInfo::WriteUser;    if(p[3] == 'x')      myPermissions |= QFileInfo::ExeUser;    if(p[4] == 'r')      myPermissions |= QFileInfo::ReadGroup;    if(p[5] == 'w')      myPermissions |= QFileInfo::WriteGroup;    if(p[6] == 'x')      myPermissions |= QFileInfo::ExeGroup;    if(p[7] == 'r')      myPermissions |= QFileInfo::ReadOther;    if(p[8] == 'w')      myPermissions |= QFileInfo::WriteOther;    if(p[9] == 'x')      myPermissions |= QFileInfo::ExeOther;}void KFileInfo::parsePermissions(uint perm){    char p[] = "----------";    if (myIsDir)	p[0]='d';    else if (myIsSymLink)	p[0]='l';    if (perm & QFileInfo::ReadUser)	p[1]='r';    if (perm & QFileInfo::WriteUser)	p[2]='w';    if (perm & QFileInfo::ExeUser)	p[3]='x';    if (perm & QFileInfo::ReadGroup)	p[4]='r';    if (perm & QFileInfo::WriteGroup)	p[5]='w';    if (perm & QFileInfo::ExeGroup)	p[6]='x';    if (perm & QFileInfo::ReadOther)	p[7]='r';    if (perm & QFileInfo::WriteOther)	p[8]='w';    if (perm & QFileInfo::ExeOther)	p[9]='x';    myAccess = p;}/* the following will go into KLocale after Beta4!!! */static const char *months[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};QString KFileInfo::dateTime(time_t _time) {    if (!months[0]) {	months[ 0] = i18n("Jan");	months[ 1] = i18n("Feb");	months[ 2] = i18n("Mar");	months[ 3] = i18n("Apr");	months[ 4] = i18n("May");	months[ 5] = i18n("Jun");	months[ 6] = i18n("Jul");	months[ 7] = i18n("Aug");	months[ 8] = i18n("Sep");	months[ 9] = i18n("Oct");	months[10] = i18n("Nov");	months[11] = i18n("Dec");    }    QDateTime t;    time_t now = time(0);    t.setTime_t(_time);    QString sTime;    if (_time > now || now - _time >= 365 * 24 * 60 * 60)	sTime.sprintf(" %04d", t.date().year());    else	sTime.sprintf("%02d:%02d", t.time().hour(), t.time().minute());    QString text;    text.sprintf("%-3s %2d %s",		 QString(months[t.date().month() - 1]).left(3).data(),		 t.date().day(),		 sTime.data());    return text;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -