判断文件是否存在方法

VC 判断文件是否存在几种方法:

1. 使用_access函数,函数原型为 int _access( const char *path, int mode );
  eg:
  #include <io.h>
  #include <stdio.h>
  #include <stdlib.h>

  void main( void )
  {
      if( (_access( "D://a.txt", 0 )) != -1 ) //Find the file "a.txt",if exist,go;
      {
          printf( "File ACCESS.C exists/n" );

          if( (_access( "ACCESS.C", 2 )) != -1 )
             printf( "File ACCESS.C has write permission/n" );
       }
  }
2. 使用CreateFile函数,函数原型为:
  HANDLE CreateFile(
              LPCTSTR lpFileName, // pointer to name of the file
              DWORD dwDesiredAccess, // access (read or write) mode
              DWORD dwShareMode, // share mode
              LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
              DWORD dwCreationDisposition, // how to create
              DWORD dwFlagsAndAttributes, // file attributes
              HANDLE hTemplateFile // handle to file with attributes
              );
   eg1:
   if (INVALID_HANDLE_VALUE != CreateFile(
            "D://a.txt",
            GENERIC_READ,
             FILE_SHARE_READ,
              NULL, OPEN_EXISTING,
              FILE_ATTRIBUTE_NORMAL,
              NULL))
    {
        AfxMessageBox("File ACCESS.C exists/n");
    }
    eg2:
    if (INVALID_HANDLE_VALUE != CreateFile("D://a.txt", 0, 0, NULL, OPEN_EXISTING, 0, NULL))
    {
        AfxMessageBox("File exists/n");
    }

3. 使用FindFirstFile函数,函数原型为:
  HANDLE FindFirstFile(
    LPCTSTR lpFileName, // pointer to name of file to search for
    LPWIN32_FIND_DATA lpFindFileData // pointer to returned information
    );
    eg:
    #define _WIN32_WINNT 0x0400 //It can be defined in head file
    #include <windows.h>
    #include <stdio.h>

    int main(int argc, char *argv[])
    {
        WIN32_FIND_DATA FindFileData;
        HANDLE hFind;

        printf ("Target file is %s./n", argv[1]);
        hFind = FindFirstFile(argv[1], &FindFileData);
        if (hFind == INVALID_HANDLE_VALUE)
        {
            printf ("Invalid File Handle. GetLastError reports %d/n", GetLastError ());
            return (0);
        }
        else
        {
            printf ("The first file found is %s/n", FindFileData.cFileName);
            FindClose(hFind);
            return (1);
        }
    }
   
4. 使用GetFileAttributes函数,函数原型如下:
  DWORD GetFileAttributes(
  LPCTSTR lpFileName // pointer to the name of a file or directory
  );
  eg:
    if (GetFileAttributes("c://1.txt") == -1)
      MessageBox(0."Invalid File ","hehe",0);
    else
      MessageBox(0."The first file found ","haha",0) ;
     
5. 使用Shell Lightweight Utility APIs函数
    PathFileExists()专门判断文件和目录时否存在的函数文件名可读性比较强还可以判断目录是否存在
    Header: Declared in Shlwapi.h Import Library: Shlwapi.lib

    以上的各种方法供参考,函数具体用法需参见MSDN。

6. FileExist(LPCWSTR lpFileName),判断文件是否存在;

    具体看前面的函数介绍,这边不多说了。

int FileExist(LPCWSTR lpFileName)
{
   HANDLE hFind;
   WIN32_FIND_DATAW FindData;
 
   hFind=FindFirstFileW(lpFileName,&FindData);// FindFirstFile return the FindData structure
 
   if(hFind==INVALID_HANDLE_VALUE)
      return 0;
 
   FindClose(hFind);
 
   return FindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?-1:1;
}

7.向文件中写入内容:

   这个只是部分代码,主要用的函数我标明一下。具体的查看MSDN。

BOOL WriteToLogFile(LPCTSTR pszLogFileName,BYTE bValue)
{
   WORD wBuffer[20] = L"";
   CHAR strSrcBuf[32] ;
   DWORD dwWriteBufLen;
   SYSTEMTIME sysLocalTime;
   g_nCount++;
   HANDLE hFile = NULL;

   GetLocalTime(&sysLocalTime);
   wsprintf(strSrcBuf,"%03u. %04u-%02u-%02u %02u:%02u:%02u %02u'C/r/n/0",/
    g_nCount,sysLocalTime.wYear,sysLocalTime.wMonth,sysLocalTime.wDay,/
    sysLocalTime.wHour,sysLocalTime.wMinute,sysLocalTime.wSecond,bValue);

   if(!WriteFile(hLogFile,strSrcBuf,sizeof(strSrcBuf),&dwWriteBufLen,NULL))
   {
    char szTemp[10];
    wsprintf(szTemp,"%d",GetLastError(),0);
    MessageBox(NULL,szTemp,0,0);
   }
   SetFilePointer(hLogFile,0,NULL,FILE_END);
   SetEndOfFile(hLogFile);
   return TRUE;
}

8.

以上部分内容来源于网络,已注明;

red 2010/02/10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值