c文件操作

一、删除文件

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);
Stay hungry Stay foolish
原文地址:https://www.cnblogs.com/xiangzi888/p/2220985.html