VC隐藏文件和判断文件是否存在.

by admin on 2020年1月27日

风流浪漫:掩盖文件。
    1.WinExec函数。
      该函数试行叁个cmd命令,如修正
      C:\Documents and Settings\eMLab\Application
Data\test.txt
      文件属性为规避能够:
      CString strFileName =
       “C:\Documents and Settings\eMLab\Application
Data\test.txt”;
      CString strCmd = “attrib +h” + strFileName;
      WinExec(strCmd,0);
      attrib改过文件属性,+h代表给文件加上隐敝属性。
    2.SetFileAttributes函数
      原型:BOOL SetFileAttributes(LPCTSTR   lpFileName,   //file name
                                   WORD   dwFileAttributes //file
attribute
                                  );    
      如:
      SetFileAttributes(strFileName,FILE_ATTRIBUTE_HIDDEN);
   FILE_ATTRIBUTE_HIDDEN就代表隐敝属性。 
    3.CFile和CFileStatus类
      CFile的静态函数GetStatus可以读取文件状态
      CFile的静态函数SetStatus能够更改文件状态
      如:
   FileStatus fs;  
      CFile::GetStatus(strFileName,fs);  
      fs.m_attribute = CFile::hidden;          //set hidden attribute
      CFile::SetStatus(strFileName,fs); 
二:判别文件是或不是留存。
  1.access函数,在io.h中。
   原型:int access(const char *filename, int amode);
      参数amode(好象有5种模式)
      0:检查文件是不是存在        
      1:检查文件是还是不是可运维        
      2:检查文件是不是可写访谈    
      4:检查文件是不是可读访谈  
      还会有朝气蓬勃种,由于MSDN溘然坏了,近来保留着
      if ( access(file,0) )
      {
      //文件空头支票
澳门新葡亰网址下载,      }
    2.CFile和CFileStatus类
      CFile的静态函数GetStatus要是再次回到FALSE表示文件荒诞不经
      CFileStatus fs;  
      if ( !CFile::GetStatus(strFileName,fs) )
      {
       //文件空中楼阁
      }

讲到文件操作大家会联想到温馨手动操作文件会波及到何等内容.相当轻易想到的是查看文件(文件夹卡塔尔国是还是不是留存,创立,复制,删除,剪切文件(文件夹卡塔尔国.其它便是设置文件的属性.

怎么着在CONSOLE
程序中用MFC 的类:(例如  cfilefind类)

     3.CFileFind类
       直接使用该类的分子函数FindFile进行决断
       CFileFind ff;  
       if ( !ff.FindFile(strFileName) )  
       {
       //文件不设有  
       }
       ff.Close();澳门新葡亰网址下载 1

那MFC中有的操作文件的类也大半是会提到到您如上操作.

在工程安装了增选   Use  
MFC   in   a   shared   DLL 
再加上#include   <afx.h> 头文件就可以,其实调节台程序跟日常的WIN32
  application  
也许MFC并未太大的分别,调节台程序也得以响应鼠标,键盘事件,MFC只是个库(DLL),

 

  1.   1、CFileFind类的申明文件保存在afx.h头文件中。
      2、该类的落到实处的功能:试行当麻芋果件的追寻(查找有些具体的文书,查找某类文件x*.x*,查找全部文件*.*)
      3、CFileFind类是CGopherFileFind和CFtpFileFind类的基类。
      4、CFileFind类的构造函数::CFileFind(卡塔尔和停业函数::Close(卡塔尔(قطر‎笔者会成对使用。
      5、CFileFind类的分子函数小编依据其操作个性划分为3类:查找操作类、拿到文件属性类、决断文件属性类。(上边小编先进行函数罗列并不曾完好的描述函数的参数State of Qatar
      查找操作类
      ::FindFile();
      ::FindNextFile();
      得到文件属性类
      ::GetCreationTime();
      ::GetLastAccessTime();
      ::GetLastWriteTime();
      ::GetFileName();
      ::GetRoot();
      ::GetFilePath();
      ::GetFileTitle();
      ::GetFileURL();
      ::GetLength();
      判定文件属性类
      ::IsArchived();
      ::IsCompressed();
      ::IsDirectory();
      ::IsDots();
      ::IsHidden();
      ::IsNormal();
      ::IsReadOnly();
      ::IsSystem();
      ::IsTemporary();
      ::MatchesMask();
      6、CFileFind类中成员函数使用应注意的次第
      在开立了CFileFind对象后,先进行::FindFile(卡塔尔(قطر‎函数,然后实行::FindNextFile(卡塔尔,然后选择试行(拿到文件属性类)的函数或许(判定文件属性类)函数。
      7、CFileFind类成员函数的详细深入分析
      virtual BOOL FindFile(LPCTSTR pstrName = null,DWORD dwUnused =
    0);澳门新葡亰网址下载 2

翻开文件

查看文件你可能凭直观后认为想到用find ,
search那样的函数.猜的轮廓不错.MFC中有个类CFileFind,它有个函数FindFile可以来判定文件是还是不是存在.

  1.   该函数若再次回到非0 则表明执行成功,0 则注明试行不成功。
      pstrName:需求索求的文书名,例:“E:\编制程序工具C++\MFC”>\VC++\MFC例子.rar”,“E:\编程工具\VC++\MFC*.rar”,“E:\编制程序工具\VC++\*.*”,也能够是NULL表示“*.*”。
      dwUnused:必须为0
      virtual BOOL FindNextFile();
      该函数再次回到值非0 还会有契合条件的文件, 0代表是末了三个文书。
      virtual BOOL GetCreationTime(FILETIME *pFileTime) const;
      virtual BOOL GetCreationTime(CTime& refTime) const;
      该函数用来得到查找到的有个别文件的始建时间,再次来到值非0
    获得创设时间成功操作,0代表试行获得创造时间退步恐怕FindNextFile(卡塔尔未有被实行的时候。
      FILETIME *:容纳时间的协会指针
      CTime&:容纳时间的靶子地址
      此处介绍:FILETIME和CTime相互转换的拍卖办法:
      FILETIME转CTime的方法:
      A、CTime对象在起头化时能够传递FILETIME布局
      FILETIME ft;
      CTime time(ft);
      B、将FILETIME调换为SYSTEMTIME,然后CTime对象在开始化时得以传递SYSTEMTIME布局
      FILETIME ft;
      SYSTEMTIME st;
      BOOL bSuccess = ::FileTimeToSystemTime(&ft , &st);
      CTime time(st);
      CTime转FILETIME方法:
      CTime time(CTime::GetCurrentTime());
      SYSTEMTIME st;
      time.GetAsSystemTime(st);
      FILETIME ft;
      ::SystemTimeToFileTime(&st,&ft);
      virtual BOOL GetLastAccessTime(FILETIME *pFileTime) const;
      virtual BOOL GetLastAccessTime(CTime& refTime) const;

  2.   该函数用来得到有个别文件最后被访问的光阴,非0表示实行成功,0代表施行停业也许FindNextFile(卡塔尔国函数未有实践的时候。
      virtual BOOL GetLastWriteTime(FILETIME *pFileTime) const;
      virtual BOOL GetLastWriteTime(CTime& refTime) const;
      该函数用来得到某些文件最终被访谈的时刻,非0表示试行成功,0表示实施破产只怕FindNextFile(卡塔尔函数未有实践的时候。
      virtual CString GetFilePath() const;
      该函数用来得到查找到的公文相对路线,必须在举办了FindNextFile(卡塔尔国后该函数才具实行成功。
      重临的结果是CString对象,例“E:\编制程序工具\VC++\MFC.rar”
      virtual CString GetFileName() const;
      该函数用来博取查找到的文本的康健,必需在实施了FindNextFile(State of Qatar后该函数能力进行成功。
      重临的结果是CString对象,例“MFC.rar”
      virtual CString GetFileTitle() const;
      该函数用来获得查找到的公文的名目,必需在施行了FindNextFile(卡塔尔国后该函数才具实行成功。
      重回的结果是CString对象,例“MFC”
      virtual CString GetRoot() const;
      该函数用来获得查找到的文书的根目录,必需在实行了FindNextFile(卡塔尔国后该函数技巧试行成功。澳门新葡亰网址下载 3

CFileFind用法

CFileFind fileFind;

CString strFileName;

strFileName = _T(“D:\test.txt”);

if(fileFind.FindFile(strFileName) );

 

除去查看文件是还是不是存在CFileFind类中还会有为数不菲任何函数能够博得文件的详细消息.比如

IsReadOnly查看是不是只读

IsHidden是不是隐身

GetLastAccessTime 查看上次文件访谈时间

GetLength查看文件大小(可是要静心的是调用了FindFile函数后还得再来个fileFind.FindNextFile(卡塔尔(قطر‎,然后再调用fileFind.GetLength(卡塔尔(قطر‎才不会出错State of Qatar

 

除此以外还应该有个布局体叫CFileStatus,也能够达成相近的大器晚成对功用.

 

  1.   再次来到的结果是CString对象,例“E:\编制程序工具\VC++\”
      virtual CString GetFileURL() const;
      该函数用来拿到查找到的文件的UENVISIONL路线,必需在实行了FindNextFile(卡塔尔(قطر‎后该函数才具执行成功。
      再次来到的结果是CString对象,例“file://E:\编制程序工具\VC++\MFC.rar”
      DWORD GetLength() const;
      该函数重回值得到查找到的文本的长度,必得在施行了FindNextFile(卡塔尔(قطر‎后该函数手艺举办成功。
      BOOL IsArchived() const;
      该函数用来推断查找的文件属性是不是是档案文件,非0表示是,0表示不是。必需在实践了FindNextFile(卡塔尔后该函数技巧奉行成功
      BOOL IsCompressed() const;
      该函数用来决断查找的文件属性是或不是是压缩文件,非0表示是,0代表不是。必需在试行了FindNextFile(卡塔尔后该函数才能试行成功
      BOOL IsDirectory() const;
      该函数用来决断查找的文件属性是不是是路线文件,非0表示是,0意味不是。必得在实践了FindNextFile(卡塔尔后该函数本事举行成功
      BOOL IsDots() const;
      该函数用来剖断查找的文件属性是还是不是是“.”,“..”,非0表示是,0代表不是。必得在履行了FindNextFile(卡塔尔(قطر‎后该函数能力实践成功
      BOOL IsHidden() const;
      该函数用来推断查找的文件属性是不是隐伏文件,非0表示是,0意味不是。必得在举办了FindNextFile(卡塔尔(قطر‎后该函数技能实行成功
      BOOL IsNormal() const;
      该函数用来剖断查找的文件属性是或不是平常文件,非0表示是,0代表不是。必得在实行了FindNextFile(卡塔尔后该函数本领推行成功
      BOOL IsReadOnly() const;

  2.   该函数用来判别查找的文件属性是还是不是只读文件,非0表示是,0意味不是。必须在实施了FindNextFile(State of Qatar后该函数技巧实行成功
      BOOL IsSystem() const;
      该函数用来判别查找的文件属性是不是系统文件,非0表示是,0象征不是。必需在施行了FindNextFile(State of Qatar后该函数本事实行成功
      BOOL IsTemporary() const;
      该函数用来判别查找的文件属性是不是不经常文件,非0表示是,0意味着不是。必需在实行了FindNextFile(State of Qatar后该函数能力实践成功
      BOOL MatchesMask(DWORD dwMask) const;
      该函数用来决断查找的文件的总结品质,非0表示是,0表示不是。必需在实行了FindNextFile(卡塔尔后该函数技巧履行成功
      dwMask参数的利用办法:二种文件属性接受或运算(|)
      文件属性的构造定义:
      FILE_ATTRIBUTE_ARC尖锐湿疣E:档案文件
      FILE_ATTRIBUTE_COMPRESSED:压缩文件
      FILE_ATTRIBUTE_DIRECTOENVISIONY:路线文件
      FILE_ATTRIBUTE_NORMAL:不荒谬文件
      FILE_ATTRIBUTE_READONLY:只读文件
      FILE_ATTRIBUTE_SYSTEM:系统文件
      FILE_ATTRIBUTE_TEMPORARAV4Y:有的时候文件
      FILE_ATTRIBUTE_HIDDEN:隐瞒文件澳门新葡亰网址下载 4

CFileStatus用法

struct CFileStatus{

CTime m_ctime; // creation date/time of file

CTime m_mtime; // last modification date/time of file

CTime m_atime; // last access date/time of file

ULONGLONG m_size; // logical size of file in bytes

BYTE m_attribute; // logical OR of CFile::Attribute enum values

BYTE _m_padding; // pad the structure to a WORD

TCHAR m_szFullName[_MAX_PATH]; // absolute path name

}

 

CFileStatu在CFile的函数GetStatus中会用到,该函数有多个本子

BOOL GetStatus(
   CFileStatus& rStatus 
) const;
static BOOL GetStatus(
   LPCTSTR lpszFileName,
   CFileStatus& rStatus 
);

在那之中八个是CFile的普通成员函数,一个是static类型的函数.也得以用该函数决断文件是还是不是存在

CFile file;

CFileStatus fileStatus;

CString strFileName;

strFileName = _T(“D:\test.txt”);

if(file.GetStatus(fileStatus))   //或者用CFile:GetStatus(strFileName,
fileStatus)

//存在

else

//不存在

 

查看,创设目录

翻看目录是还是不是留存非常粗略

CString strDirPath = _T(“D:\Temp”);

BOOL bExistDir = ::PathFileExists(strDirPath);

 

创建目录

CString strDirName = _T(“D:\Temp\Dir”);

::CreateDirectory(strDirName,NULL卡塔尔国; //要保障Temp是存在的.

 

 

开创文件

CFile file;

CFileException exp;

CString strFileName = _T(“D:\temp\arwen.txt”);

 

//创立文件,即使已经存在文件则会覆盖此前的剧情

BOOL bCreateFile = file.Open(strFileName,CFile::modeCreate,&exp);

尽管创立失利你想驾驭详细消息的话能够通过exp.m_cause去获得,
大概的错误消息是

enum {none,  genericException,

fileNotFound,  badPath,

tooManyOpenFiles,   accessDenied,

invalidFile,      removeCurrentDir,

directoryFull,    badSeek,

hardIO,  sharingViolation,

lockViolation,    diskFull,  endOfFile

}

 

写文件

即使要往文件中写入些内容

CFile file;

CString strFileName = _T(“D:\temp\arwen.txt”);

CString strInfo = _T(“hello,worldn”);

int nSize = strInfo.GetLength();

if(file.Open(strFileName,CFile::modeReadWrite,&exp))

{

file.Write(strInfo.GetBuffer(0),nSize);

file.Flush();

file.Close();

}

 

不过CFile用起来依旧不便利,有个继续自它的类CStdioFile,用起来就比较便利

CStdioFile file;

file.WriteString(strInfo);

 

读文件

CStdioFile file;

file.Open(strFileName,CFile::modeRead);

CString strText;

CString strTemp;

while(file.ReadString(strTemp))

{

  strText += strTemp;

}

file.Close();

 

文件属性设置

若是你读或写文件时不让别的人操作该文件(有一点像数据库中的上锁State of Qatar,咋整呢?

file.Open( strFileName, CFile::modeWrite | CFile:shareDenyRead)

CFile:shareDenyRead 就表示你操作时人家也不可能读文件.

就算是可让别人读但无法写正是CFile::shareDenyWrite

 

别的我们平常碰到一些文书时只读的,或然是隐形的.怎么在代码中安装呢

SetFileAttributes(strFileName, FILE_ATTRIBUTE_READONLY卡塔尔; 
//设置文件为只读

                                            
FILE_ATTRIBUTE_HIDDEN正是表示掩瞒

 

假定你要注销那一个属性就疑似此

SetFileAttributes(strFileName, FILE_ATTRIBUTE_NORMAL);

 

安装属性还恐怕有别的二个情势

CFileStatus status;

CFile::GetStatus(strFileName, status);

status.m_attribute |= CFile::readOnly;

CFile::SetStatus(strFileName, status);

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图