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