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.

edisonx 發表在 痞客邦 PIXNET 留言(0) 人氣()