一、刪除檔案
1.c 調用dos命令: system(char *cmd); 如 system( "del d:\\chang\\xxx.txt "); 刪除檔案
2.調用api: 刪除一個檔案: int remove(char *filename ); 返回0 成功 -1失敗
3.DeleteFile("d:\\new.txt"); //刪除一個檔案
BOOL DeleteFile(LPCTSTR filename);
4._unlink( filename ) //失敗時返回 -1
二、重新命名(也可通過後面介紹的 move,copy實現)
rename(oldname,newname) //成功時返回 0
三、建立目錄
1.mkdir("c:\\info\\world"); //失敗時返回 -1
2.單級(sa 為安全屬性,取 NULL 預設),多級目錄需自訂
BOOL CreateDirectory(LPCTSTR dirname, LPSECURITY sa);
3.多級
system("mkdir c:\\a\\b\\c");
四、列出目錄下的檔案資訊
void listAll(char *path){
WIN32_FIND_DATA findData;
HANDLE listFile;
strcat(path, "\\*"); //代表列出所有檔案
//FindFirstFile("d:\\htdocs\\*.txt",&findData)
listFile = FindFirstFile(path, &findData);
do{
if(lstrcmp(findData.cFileName,TEXT("."))==0||
lstrcmp(findData.cFileName,TEXT(".."))==0)
continue;
printf("%s\t\t",findData.cFileName);
if(findData.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN)
printf("hidden\t\t");
if(findData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
printf("DIR\t\t");
printf("\n");
}while(FindNextFile(listFile,&findData));
}
五、讀取檔案修改時間
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
DWORD ShowFileTime(PFILETIME lptime);
int main(int argc, char *argv[])
{
//檔案屬性結構
WIN32_FILE_ATTRIBUTE_DATA wfad;
//擷取檔案屬性
GetFileAttributesEx("d:\\htdocs\\index.html",GetFileExInfoStandard,&wfad);
ShowFileTime(&(wfad.ftLastWriteTime));
//ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow);
return 0;
}
DWORD ShowFileTime(PFILETIME lptime){
FILETIME ftLocal;
SYSTEMTIME st;
FileTimeToLocalFileTime(lptime,&ftLocal);
FileTimeToSystemTime(&ftLocal,&st);
printf("%4d/%02d/%02d",st.wYear,st.wMonth,st.wDay);
return 0;
}
六、讀取檔案大小
1.
findfirst的第三個參數可以具有下列值:
#define FA_RDONLY 0x01 /* Read only attribute */
#define FA_HIDDEN 0x02 /* Hidden file */
#define FA_SYSTEM 0x04 /* System file */
#define FA_LABEL 0x08 /* Volume label */
#define FA_DIREC 0x10 /* Directory */
#define FA_ARCH 0x20 /* Archive */
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
DWORD ShowFileSize(DWORD dwHigh,DWORD dwLow);
int main(int argc, char *argv[])
{
//檔案屬性結構
WIN32_FILE_ATTRIBUTE_DATA wfad;
//擷取檔案屬性
GetFileAttributesEx("d:\\test.txt",GetFileExInfoStandard,&wfad);
ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow);
return 0;
}
DWORD ShowFileSize(DWORD dwHigh,DWORD dwLow){
ULONGLONG liFileSize;
liFileSize = dwHigh;
liFileSize <<= sizeof(DWORD)*8;
liFileSize += dwLow;
printf("%I64u\n",liFileSize);
return 0;
}
2.直接調用系統函數,更方便。fsh 可設定為 NULL。
DWORD GetFileSize(HANDLE hf, LPDWORD fsh);
七、實現所有檔案的遍曆
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DWORD listAllFile(LPSTR path);
DWORD listAllFile(LPSTR path){
WIN32_FIND_DATA findData;
HANDLE listFile;
char fullPath[100];
char tempPath[100];
lstrcpy(tempPath,path);
lstrcat(tempPath,"\\*");
listFile = FindFirstFile(tempPath,&findData);
do{
if(lstrcmp(findData.cFileName,TEXT("."))==0||
lstrcmp(findData.cFileName,TEXT(".."))==0)
continue;
//printf("%s\t\t",findData.cFileName);
//構成全路徑
wsprintf (fullPath,"%s\\%s",path,findData.cFileName);
printf("%s\n",fullPath);
/*if(findData.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN)
printf("hidden\t\t");*/
if(findData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY){
listAllFile(fullPath);
}
}while(FindNextFile(listFile,&findData));
return 0;
}
int main(int argc, char *argv[])
{
listAllFile("e:\\linuxBooks");
return 0;
}
八、檔案讀操作
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch;
FILE *fp;
fp =fopen("aaa.txt","w");
while((ch = getc(fp)) != EOF){
putchar(ch);
}
fclose(fp);
return 0;
}
九、刪除目錄
1.rmdir( "ugg "); // 刪除一個目錄,空
2.刪除存在的空目錄
BOOL RemoveDirectory(LPCTSTR path);
3.system("rmdir /s/q ugg"); //刪除非空檔案夾
十、檢查檔案存在性及許可權
1.
int _access(const char *path, int mode);
mode Value Checks File For
00 Existence only
02 Write permission
04 Read permission
06 Read and write permission
2.自訂函數
BOOL FileExists(LPCTSTR filename, BOOL dircheck){ DWORD dwa = GetFileAttributes(filename); if (dwa == 0xFFFFFFFF){ /* error */ return FALSE; } /* is a dir */ if ((dwa & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY){ if (dircheck){ return TRUE; }else{ return FALSE; } } else{ /* is a file */ if (!dircheck){ return TRUE; }else{ return FALSE; } }}
十一、檔案的複製與移動
//不覆蓋if(CopyFile("d:\\test.txt","c:\\test.txt",TRUE)) puts("檔案複製成功");if(CopyFile("d:\\test.txt","c:\\test.txt",FALSE)) puts("檔案覆蓋成功");if(MoveFile("d:\\test.txt","c:\\test.txt")) puts("move");
另一個移動函數的原型(可覆蓋)dwflags :MOVEFILE_REPLACE_EXISTING (替換原有檔案)
BOOL MoveFileEx(LPCTSTR src, LPCTSTR dest, DWORD dwflags);