1. 刪除檔案
(1) C/C++ - remove / stdio.h
int remove ( const char * filename );
const char* filename = "D:\\Test.txt"
if (!remove(filename)) // success
else // fail.
(2) C/C++ - remove / stdio.h
int _unlink(const char *filename)
const char* filename = "D:\\Test.txt"
if (!unlink(filename)) // success
else // fail.
(3) API - DeleteFile / windows.h
BOOL WINAPI DeleteFile(
__in LPCTSTR lpFileName
);
if(!DeleteFile("FileName.txt")) // sucess.
else // fail.
2. 複製檔案
(1) API - CopyFile / windows.h
BOOL WINAPI CopyFile(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName,
__in BOOL bFailIfExists (TRUE: 新檔存在不覆蓋,使之 fail.)
);
if(!CopyFile("OldFile.txt", "NewFile.txt", FALSE)) // sucess.
else // fail.
(2) API - CopyFileEx / windows.h
BOOL WINAPI CopyFileEx(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName,
__in_opt LPPROGRESS_ROUTINE lpProgressRoutine,
__in_opt LPVOID lpData,
__in_opt LPBOOL pbCancel,
__in DWORD dwCopyFlags
);
這個要再寫一個 CALLBACK function,另外再介紹。
3. 移動檔案
(1) API - MoveFile / windows.h
BOOL WINAPI MoveFile(
__in LPCTSTR lpExistingFileName,
__in LPCTSTR lpNewFileName
);
LPCTSTR src_file = "D:\\Test.txt";
LPCTSTR des_file = "D:\\NewFile.txt";
if(MoveFile(src_file, des_file)) // sucess
else // fail.
(2) API - MoveFileEx / windows.h
BOOL WINAPI MoveFileEx(
__in LPCTSTR lpExistingFileName,
__in_opt LPCTSTR lpNewFileName,
__in DWORD dwFlags
);
這函式不好用,跳過。
4. 取得檔案大小
(1) C/C++ - filelength / io.h
long filelength(
int fd
);
這方法要先用 sopen 方式開檔,操作上比較麻煩
int fh, result;
unsigned long int Size=0;
if( _sopen_s( &fh, "data", O_RDWR | O_CREAT, SH_DENYNO,
S_IREAD | S_IWRITE ) == 0 )
{
Size = filelength(fh);
close(fh);
}
(2) C/C++ - _filelengthi64 / io.h
__int64 _filelengthi64(
int fd
);
(3) API - GetFileSize / windows.h
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
LPCTSTR filename = "D:\\Data.txt";
DWORD Lo, Hi;
unsigned long long FileSize;
HANDLE handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(handle!=INVALID_HANDLE_VALUE) { // success
Lo = GetFileSizeEx(handle, &Hi));
FileSize = ((unsigned long long )Hi << 32) & Lo;
CloseHandle(handle);
}
(4) API - GetFileSizeEx / windows.h
BOOL WINAPI GetFileSizeEx(
__in HANDLE hFile,
__out PLARGE_INTEGER lpFileSize
);
LPCTSTR filename = "D:\\Data.txt";
LARGE_INTEGER szFileSize;
HANDLE handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(handle!=INVALID_HANDLE_VALUE) { // success
if(!GetFileSizeEx(handle, &szFileSize)) printf("%llu\n", szFileSize);
else printf("get file size fail.\n");
CloseHandle(handle);
}
5. 結構體 FILETIME / windows.h
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
6. 取得檔案時間
(1) API - GetFileTime / windows.h
BOOL WINAPI GetFileTime(
__in HANDLE hFile,
__out_opt LPFILETIME lpCreationTime,
__out_opt LPFILETIME lpLastAccessTime,
__out_opt LPFILETIME lpLastWriteTime
);
LPCTSTR filename = "D:\\Data.txt";
FILETIME createt, accesst, writet;
HANDLE handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(handle!=INVALID_HANDLE_VALUE){ // success
if(!GetFileTime(filename, &createt, &accesst, &writet)) // success
else // fail.
CloseHandle(handle);
}
7. 設定檔案時間
(1) API - SetFileTime / windows.h
BOOL WINAPI SetFileTime(
__in HANDLE hFile,
__in_opt const FILETIME *lpCreationTime,
__in_opt const FILETIME *lpLastAccessTime,
__in_opt const FILETIME *lpLastWriteTime
);
LPCTSTR filename = "D:\\Data.txt";
FILETIME createt, accesst, writet;
HANDLE handle = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(handle!=INVALID_HANDLE_VALUE){ // success
if(!SetFileTime(filename, &createt, &accesst, &writet)) // success
else // fail.
CloseHandle(handle);
}
8. 取得檔案種類
(1) API - GetFileType / windows.h
DWORD WINAPI GetFileType(
__in HANDLE hFile
);
FILE_TYPE_CHAR(0x0002):char file
FILE_TYPE_DISK(0x0001):disk file
FILE_TYPE_PIPE(0x0003):socket
FILE_TYPE_REMOTE(0x8000):unused
FILE_TYPE_UNKNOW(0x0000):unknow
LPCTSTR filename = "D:\\Data.txt";
HANDLE handle = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD type;
if(handle!=INVALID_HANDLE_VALUE){ // success
type = GetFileType(filename);
CloseHandle(handle);
}
9. 結構體 WIN32_FILE_ATTRIBUTE_DATA / windows.h
typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
DWORD dwFileAttributes; // 屬性
FILETIME ftCreationTime; // 建立時間
FILETIME ftLastAccessTime; // 尋訪時間
FILETIME ftLastWriteTime; // 寫入時間
DWORD nFileSizeHigh; // 檔案大小(HI)
DWORD nFileSizeLow; // 檔案大小(LOW)
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
dwFileAttributes:
FILE_ATTRIBUTE_ARCHIVE 存檔
FILE_ATTRIBUTE_COMPRESSED 壓縮
FILE_ATTRIBUTE_DIRECTORY 目錄
FILE_ATTRIBUTE_ENCRYPTED 加密
FILE_ATTRIBUTE_HIDDEN 隱藏
FILE_ATTRIBUTE_NORMAL 普通,只能單獨使用
FILE_ATTRIBUTE_OFFLINE 離線
FILE_ATTRIBUTE_READONLY 唯讀
FILE_ATTRIBUTE_SYSTEM 系統
FILE_ATTRIBUTE_TEMPORARY 暫存
FILE_ATTRIBUTE_VIRTUAL 虛擬
這方便應用相當廣,日後再說明。
10. 檔案權限檢查
(1) C/C++ - access / stdio.h
int access(
const char *path,
int mode
);
mode
00 : 存在
02 : 唯寫
04 : 唯讀
06 : 可讀寫
const char* filename = "D:\\Data.txt";
int ret = access(filename, 02);
if(ret==0) // file is write only
else if(ret==-1) // file doesn't exist.
else // call to errno.
(2) API - GetFileAttributes / windows.h
DWORD GetFileAttributes(
LPCTSTR lpFileName
);
return
FILE_ATTRIBUTE_ARCHIVE
FILE_ATTRIBUTE_COMPRESSED
FILE_ATTRIBUTE_DIRECTORY
FILE_ATTRIBUTE_ENCRYPTED
FILE_ATTRIBUTE_HIDDEN
FILE_ATTRIBUTE_INROM
FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_READONLY
FILE_ATTRIBUTE_ROMMODULE
FILE_ATTRIBUTE_ROMSTATICREF
FILE_ATTRIBUTE_SYSTEM
FILE_ATTRIBUTE_TEMPORARY
LPCTSTR filename = "D:\\Data.txt";
DWORD Ret = GetFileAttributes(filename);
if(Ret & FILE_ATTRIBUTE_HIDDEN == FILE_ATTRIBUTE_HIDDEN) // hidden
(3) API - GetFileAttributesEx / windows.h
BOOL GetFileAttributesEx(
LPCTSTR lpFileName,
GET_FILEEX_INFO_LEVELS fInfoLevelId,
LPVOID lpFileInformation
);
這函式可講的太多了,日後再說。
11. 設定檔案權限
(1) API - SetFileAttributes / windows.h
BOOL WINAPI SetFileAttributes(
__in LPCTSTR lpFileName,
__in DWORD dwFileAttributes
);
dwFileAttributes 參考上述 10. 2 。
const char* filename = "D:\\Data.txt";
BOOL ret = SetFileAttributes(filename, FILE_ATTRIBUTE_HIDDEN)
if(ret!=0) // success.
else // fail.
留言列表