C/C++中如何判断某一文件或目录是否存在

以下文章是对C/C++中判断某一文件或目录是否存在的实现代码进行了详细的分析介绍,需要的朋友可以参考下
 

1.C++很简单的一种办法:

复制代码 代码如下:

#include <iostream>
#include <fstream>
using namespace std;
#define FILENAME "stat.dat"
int main()
{
     fstream _file;
     _file.open(FILENAME,ios::in);
     if(!_file)
     {
         cout<<FILENAME<<"没有被创建";
      }
      else
      {
          cout<<FILENAME<<"已经存在";
      }
      return 0;
}

2.利用 c 语言的库的办法:
函数名: access
功  能: 确定文件的访问权限
用  法: int access(const char *filename, int amode);
以前一直没用过这个函数,今天调试程序发现了这个函数,感觉挺好用,尤其是判断一个文件或文件夹是否存在的时候,用不着再find了,文件的话还可以检测读写权限,文件夹的话则只能判断是否存在,下面摘自MSDN:
int _access( const char *path, int mode );
Return Value
Each of these functions returns 0 if the file has the given mode. The function returns –1 if the named file does not exist or is not accessible in the given mode; in this case, errno is set as follows:
EACCES
Access denied: file's permission setting does not allow specified access.
ENOENT
Filename or path not found.
Parameters
path
File or directory path
mode
Permission setting
Remarks
When used with files, the _access function determines whether the specified file exists and can be accessed as specified by the value of mode. When used with directories, _access determines only whether the specified directory exists; in Windows NT, all directories have read and write access.
mode Value            Checks File For
00                              Existence only
02                              Write permission
04                              Read permission
06                              Read and write permission
Example

复制代码 代码如下:

/* ACCESS.C: This example uses _access to check the
 * file named "ACCESS.C" to see if it exists and if
 * writing is allowed.
 */
#include  <io.h>
#include  <stdio.h>
#include  <stdlib.h>
void main( void )
{
   /* Check for existence */
   if( (_access( "ACCESS.C", 0 )) != -1 )
   {
      printf( "File ACCESS.C exists " );
      /* Check for write permission */
      if( (_access( "ACCESS.C", 2 )) != -1 )
         printf( "File ACCESS.C has write permission " );
   }
}

OutputFile ACCESS.C existsFile ACCESS.C has write permission
3.在windows平台下用API函数FindFirstFile(...):
(1)检查文件是否存在:

复制代码 代码如下:

#define _WIN32_WINNT 0x0400
#include "windows.h"
int
main(int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;
  printf ("Target file is %s. ", argv[1]);
  hFind = FindFirstFile(argv[1], &FindFileData);
  if (hFind == INVALID_HANDLE_VALUE) {
    printf ("Invalid File Handle. Get Last Error reports %d ", GetLastError ());
  } else {
    printf ("The first file found is %s ", FindFileData.cFileName);
    FindClose(hFind);
  }
  return (0);
}

(2)检查某一目录是否存在:

复制代码 代码如下:

///目录是否存在的检查:
bool  CheckFolderExist(const string &strPath)
{
    WIN32_FIND_DATA  wfd;
    bool rValue = false;
    HANDLE hFind = FindFirstFile(strPath.c_str(), &wfd);
    if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
    {
        rValue = true;  
    }
    FindClose(hFind);
    return rValue;
}

4.使用boost的filesystem类库的exists函数

复制代码 代码如下:

#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/convenience.hpp>
int GetFilePath(std::string &strFilePath)
{
    string strPath;
    int nRes = 0;
    //指定路径           
    strPath = "D:/myTest/Test1/Test2";
    namespace fs = boost::filesystem;
    //路径的可移植
    fs::path full_path( fs::initial_path() );
    full_path = fs::system_complete( fs::path(strPath, fs::native ) );
    //判断各级子目录是否存在,不存在则需要创建
    if ( !fs::exists( full_path ) )
    {
        // 创建多层子目录
        bool bRet = fs::create_directories(full_path);
        if (false == bRet)
        {
            return -1;
        }
    }
    strFilePath = full_path.native_directory_string();
    return 0;
}

时间: 2024-10-30 19:50:38

C/C++中如何判断某一文件或目录是否存在的相关文章

C/C++中如何判断某一文件或目录是否存在_C 语言

1.C++很简单的一种办法: 复制代码 代码如下: #include <iostream>#include <fstream>using namespace std;#define FILENAME "stat.dat"int main(){     fstream _file;     _file.open(FILENAME,ios::in);     if(!_file)     {         cout<<FILENAME<<&

3 个在 Linux 中永久并安全删除文件和目录的方法

在大多数情况下,我们习惯于使用 Delete 键.垃圾箱或 rm 命令从我们的计算机中删除文件,但这不是永久安全地从硬盘中(或任何存储介质)删除文件的方法. 该文件只是对用户隐藏,它驻留在硬盘上的某个地方.它有可能被数据窃贼.执法取证或其它方式来恢复. 假设文件包含密级或机密内容,例如安全系统的用户名和密码,具有必要知识和技能的攻击者可以轻松地恢复删除文件的副本并访问这些用户凭证(你可以猜测到这种情况的后果). 在本文中,我们将解释一些命令行工具,用于永久并安全地删除 Linux 中的文件. 1

Excel中超链接无法打开指定文件怎么办

  在Excel中创建的超链接指向同一文件夹内的文件时,插入超链接的"地址"栏仅显示该文件名称.如果没有指定路径,就会产生一个问题:当设置超链接的文件位置改变时,这个超链接会失效,发生下图的问题. 1.可以通过设置超链接基础来解决这个问题.超链接基础在文件属性的摘要中,对于不同版本的office软件来说可能少有不同,这里以2007版本做演示.按照图示,选择文件-准备-属性. 2.在文件属性下拉中,点击高级属性. 3.在属性摘要中的超链接基础中填入之前连接文件所在目录的地址.      

《鸟哥的Linux私房菜》7章 Linux文件与目录管理 习题答案

自己整理了一下,分享给大家,这些习题确实是非常经典的! 1.什么是绝对路径与相对路径? 绝对路径是相对于/目录的路径的,比如/home/user: 相对路径是相对于当前工作目录的,比如你的系统上有个/home/user/test目录,此时你在/home/user目录下,那么./test就是相对路径. 2.如何更改一个目录的名称?例如/home/test变为/home/test2. 1 mv /home/test /home/test2 3.PATH这个环境变量的意义是什么? 这里先看一下PATH

LINUX学习(一)文件与目录操作

        用户的数据和程序大多以文件的形式保存.用户使用Linux系统的过程中,需要经常对文件和目录进行操作.本章讲述了文件与目录的基本概念,有关文件和目录操作的命令以及如何在Linux环境下运行DOS命令. 文件与目录的基本概念 文件与文件名 在多数操作系统中都有文件的概念.文件是Linux用来存储信息的基本结构,它是被命名(称为文件名)的存储在某种介质(如磁盘.光盘和磁带等)上的一组信息的集合.Linux文件均为无结构的字符流形式.文件名是文件的标识,它由字母.数字.下划线和圆点组成的

代码分析-Java中如何判断文件夹下当天有没有放文件?

问题描述 Java中如何判断文件夹下当天有没有放文件? List files = ftpUtil.getFileList(this.ftpTaskFolder);//ftp任务目录上获取任务文件 // 获取机构号全量数据传输任务文件 String organcodeFileName = """"; for (int i = 0; files != null && i < files.size(); i++) { String tempFileN

java-JAVA中如何判断一个文件是否存在,如果不存在则创建它?

问题描述 JAVA中如何判断一个文件是否存在,如果不存在则创建它? JAVA中如何判断一个文件是否存在,如果不存在则创建它? 求帮助 源码如下: public void SaveFile(String fileName,String content) throws IOException{ File file =new File(fileName); if(!file.exists()){ System.out.println("不存在"); System.out.println(fi

字体-C#中如何判断TTF文件中是否包含某个字符

问题描述 C#中如何判断TTF文件中是否包含某个字符 如图,所要实现的功能就是根据输入的文字,生成相应字体的图片预览,用的是Graphics.DrawString方法,但是遇到字体中没有的字符,会以其他字体显示出来,这里想要的功能就是如何判断字库文件里有没有这个字,如果没有统一替换成一个圆圈符号.没有头绪,网上看到用其他语言实现的,但是真的新手,不会调用,想知道C#下怎么实现这个功能. 解决方案 http://stackoverflow.com/questions/103725/is-there

在文本字符串中如何判断超链接文件是否有权限下载

问题描述 我有一个字符串.其中包括一些文件的超链接.如rar或者是word又或者是pdf.我现在想根据用户是否登录来判断(其中是否登录用Cookie是否为空来判断)这些超链接是否可用.也就是如果用户已经登录,那么可以正常下载,否则点击文件时(弹出提示框)或超链接不可用(在旁边显示只有登录,才可下载).一篇文章中可能有多个文件的超链接.不知道各位有什么办法解决.类似如下<IMGsrc="/ewebeditor/sysimage/file/rar.gif"border=0>&l