关于文本文件和二进制文件

1、二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放,也就是说存放的是数据的原形式

2、文本文件是把数据的终端形式的二进制数据输出到磁盘上存放,也就是说存放的是数据的终端形式

文本文件与二进制文件在计算机文件系统中的物理存储都是二进制的,也就是在物理存储方面没有区别都是01码,这个没有异议,他们的区别主要在逻辑存储上,也就是编码上。
         文本文件格式存储时是将值作为字符然后存入其字符编码的二进制,文本文件用‘字符’作为单位来表示和存储数据,比如对于1这个值,文本文件会将其看做字符‘1’然后保存其ASCII编码值(这里假定是ASCII编码),这样在物理上就是0x31这个二进制值,而若是二进制保存1,则直接保存其二进制值,比如如果程序中是处理1为整数则保存的二进制值就是 0x00000001 (4字节)。

一般而言,二进制去操作文件会比较可靠,不会出现乱码的情况

memcpy比strcpy要好用

fread函数在读取之后就会将指针移到读取后的位置

如果涉及到磁盘操作,一定记得操作前加锁,操作后解锁,避免不必要的问题

二进制操作的时候,一定记得要把关键字“b”加上

当一个文件被删除后,在文件系统目录中已经不可见了,然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除

fseek(文件指针,偏移量,0/1/2);关于偏移量的取值,正为向后,负为向前,

比如fseek(fp,-8,SEEK_END),就代表从文件尾前移8个字节

FILE *fp2 = fopen("C:\\Users\\Write_Data2.txt","w+");

上面的句子,会没有创建权限,一般不能写再C盘根目录,写在别的文件夹里,//更正一下,是杀毒软件限制了权限

fopen打开失败的几种情况

1.关于文件路径的参数不对

2.关于mode参数,超出权限

3.句柄泄露,没有遵循及时打开及时关闭的原则

ShellExecute的功能是运行一个外部程序

示例为运行dll_X64.exe,一个微软的dll文件运行库的安装包

ShellExecute(0,"open","dll_X64.exe","","",SW_SHOWNORMAL);

DeleteFile删除失败

检查文件句柄,是否在别处打开没有及时关闭,操作文件一定记得及时打开和关闭句柄

设置文件的属性

SetFileAttributes(D_file_name.c_str(),0); //修改文件属性
常数          值       描述
Normal        0       普通文件。没有设置任何属性。
ReadOnly      1       只读文件。可读写。
Hidden        2       隐藏文件。可读写。
System        4       系统文件。可读写。
Directory     16      文件夹或目录。只读。
Archive       32      上次备份后已更改的文件。可读写。
Alias        1024     链接或快捷方式。只读。
Compressed   2048     压缩文件。只读。

获取当前用户名

   char buff[32];DWORD size = 32;AnsiString user = GetUserName(buff,&size);int err = GetLastError();err =  0;ShowMessage(buff);//buff里面存储当前用户名

获取文件的最后修改时间,可用于release版本,设置可执行软件的有效期许可证

 FILE * fp;int fd;struct stat buf;fp=fopen("Project1.exe","r");//文件名long int day1;if(NULL != fp){fd=fileno(fp);fstat(fd, &buf);int size = buf.st_size; //get file size (byte)long modify_time=buf.st_mtime; //latest modification time (seconds passed from 01/01/00:00:00 1970 UTC)day1 = modify_time/3600/24;fclose(fp);}time_t lt;lt = time(NULL);//当前系统时间,同modify_time

读取磁盘固定位置的字符

//==============读取G盘0扇区的512字节,系统盘分区要注意权限===========================HANDLE hFile;char drive[] = "\\\\.\\G:";char buf[512];hFile = CreateFile(drive,GENERIC_READ,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);int a = GetLastError();//if(hFile != NULL){LARGE_INTEGER   fileOffset;SetFilePointer(hFile,0,NULL,FILE_BEGIN);DWORD lenRead;ReadFile(hFile,buf,512,&lenRead,NULL);}

关于判断当前文件夹或者文件是否存在

1. fopen函数原型:FILE *fopen (char *filename, char *type);

filename:文件路径

type:打开文件的方式(有r、w、r+、w+、a、rb、wb等等)

用于判断文件是否存在可以使用 r 或者 rb ,因为使用 其它方式的话,可能会自动建立文件。 返回值为NULL(打不开)和正数(能打开)。

特别提醒:用这种方法做出的判断是不完全正确的,因为有的文件存在,但是可能不可读

2.access函数判断文件夹或者文件是否存在

函数原型: int access(const char *filename, int mode);

所属头文件:io.h

filename:可以填写文件夹路径或者文件路径

mode:0 (F_OK) 只判断是否存在

2 (R_OK) 判断写入权限

4 (W_OK) 判断读取权限

6 (X_OK) 判断执行权限

    if ( !access("C://windows",0) )puts("C://windows EXISITS!");elseputs("C://windows DOESN'T EXISIT!");

监控文件变化

void DirectoryMonitoring(AnsiString newPath)
{DWORD cbBytes;char file_Name[MAX_PATH]; //设置文件名char file_Name2[MAX_PATH]; //设置文件重命名后的名字char notify[1024];char *dir =  newPath.c_str();//需要监控的文件夹路径,绝对路径HANDLE dirHandle = CreateFile(dir, GENERIC_READ | GENERIC_WRITE | FILE_LIST_DIRECTORY,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);if (dirHandle == INVALID_HANDLE_VALUE) //若网络重定向或目标文件系统不支持该操作,函数失败,同时调用GetLastError()返回ERROR_INVALID_FUNCTION{ShowMessage(" The System Does Not Support!" );}memset(notify, 0, strlen(notify));FILE_NOTIFY_INFORMATION *pnotify = (FILE_NOTIFY_INFORMATION*)notify;//   cout << "The system has been started monitoring..." << endl;while (count < 1)//一只健康就应该while(true){if (ReadDirectoryChangesW(dirHandle, &notify, 1024, true,FILE_NOTIFY_CHANGE_FILE_NAME |FILE_NOTIFY_CHANGE_DIR_NAME| FILE_NOTIFY_CHANGE_SIZE,&cbBytes, NULL, NULL)){//转换文件名为多字节字符串if (pnotify->FileName){char str[100]= {0};memset(file_Name, 0, strlen(file_Name));int length =     WideCharToMultiByte(CP_ACP, 0, pnotify->FileName, pnotify->FileNameLength / 2, file_Name, 99, NULL, NULL);//返回发生变化的文件名的文件名长度,包括后缀memcpy(str,file_Name,length);newFilePath  = newPath + str;}//获取重命名的文件名if (pnotify->NextEntryOffset != 0 && (pnotify->FileNameLength > 0 && pnotify->FileNameLength < MAX_PATH)){PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pnotify + pnotify->NextEntryOffset);memset(file_Name2, 0, sizeof(file_Name2));WideCharToMultiByte(CP_ACP, 0, p->FileName, p->FileNameLength / 2, file_Name2, 99, NULL, NULL);}//设置类型过滤器,监听文件创建、更改、删除、重命名等switch (pnotify->Action){case FILE_ACTION_ADDED:break;case FILE_ACTION_MODIFIED:count++;fileUpdate(oldFilePath, newFilePath);自定义处理函数,其它case同理//ShowMessage(name);break;case FILE_ACTION_REMOVED:break;case FILE_ACTION_RENAMED_OLD_NAME:break;default:ShowMessage("Unknow Command!" );}}}CloseHandle(dirHandle);
}

文件复制转移

CopyFile(A, B, FALSE);表示将文件A拷贝到B,参数都是绝对路径名

如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖)

B不存在就在相应路径下置放文件A

C语言文件处理的一些总结相关推荐

  1. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码

    前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据.但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写.这种读写方式称为随机读 ...

  2. c语言文件可用代码存放,C语言 文件(示例代码)

    小白一个,看到有错误,希望指出,万分感谢 /**************************************************************** C语言文件概述: 一般文件 ...

  3. C语言文件操作解析(二)【转载】

    http://www.cnblogs.com/dolphin0520/archive/2011/10/05/2199598.html C语言文件操作解析(二) C语言中对文件进行操作必须首先打开文件, ...

  4. C语言文件操作解析(二)

    C语言文件操作解析(二) C语言中对文件进行操作必须首先打开文件,打开文件主要涉及到fopen函数.fopen函数的原型为 FILE* fopen(const char *path,const cha ...

  5. C语言文件操作函数大全(看到总结的真的很好,就转载贡献给大家了)

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * st ...

  6. C语言文件读写(5)-文件位置相关

    C语言文件读写(5)-文件位置相关 当打开一个文件以后,无论是读还是写,都有一个指示文件位置的这么一个东西,我们可以称之为文件的位置指示器或者文件位置指针,文件位置指示器指明了当前文件读或者写的位置信 ...

  7. C语言文件读写(4)-判断文件是否结束

    C语言文件读写-判断文件是否结束 在读文件的时候,很重要的一个条件是:文件是否结束,因为文件已经结束了,就不用继续读文件了. 判断文件结束,有许多方式,比如读取文本文件和二进制文件就可以使用不同的方式 ...

  8. C语言文件读写(3)-二进制文件读写操作

    C语言文件读写-二进制文件读写操作 先说说什么是二进制文件,二进制文件是相对于文本文件而言的,文本文件是由一行一行的字符的有序序列组成的.二进制文件就没有行的概念了,也是由有序的字符组成的,但是在写入 ...

  9. C语言文件读写(2)-文本文件写操作

    C语言文件读写-文本文件写操作 在上一篇中介绍了如何读取文本文件 https://blog.csdn.net/zhanghaiyang9999/article/details/107032563 这一 ...

  10. AutoHotkey热键脚本语言文件

    ;=== AutoHotkey热键脚本语言文件 autoHotkey.ini 从此行开始 === The Sart Line Of autoHotkey.ini AutoHotkey ScriptFi ...

最新文章

  1. 【原创】ListView快速滚动至新添加一行(自动滚动)
  2. mysql不等于判断时,空值过滤问题
  3. 女人护肤品可与男人共用! - 健康程序员,至尚生活!
  4. Java中的Google ClientLogin实用程序
  5. 病毒侵袭(HDU-2896)
  6. 外连接有 OR 关联条件只能走 NL优化
  7. 大前端的自动化工厂(1)——Yeoman
  8. 制造-销售”模式正在消亡,传统大型企业的上云之路要如何举步?
  9. ubuntu服务器系统不识别,U盘安装16.04server版 安装好后重启 无法进入系统
  10. pdf转txt出现句子异常中断,如何连接被切断的字符串
  11. Proteus常用元件对照表(最全)
  12. 【华为电脑管家】打开多屏协同会自动修改微软拼音输入法兼容性的解决方案
  13. 关于input在苹果和安卓手机上调用相机和相册的问题
  14. iOS 手势的用法
  15. Python pycharm一个文件夹如何变成一个model
  16. e^x导数为什么是e^x
  17. 基本功:线程上下文切换
  18. 【Oracle 数据库】奶妈式教程day15 DDL、DML、索引、视图、序列、死锁这一篇就够了
  19. 求与下面谓词公式等值的前束范式_离散数学课后答案
  20. 这样构建的用户画像!想不懂你的用户都难

热门文章

  1. Processor Registers(处理器寄存器)1.2
  2. 推荐一款 IntelliJ IDEA 神级插件,由 ChatGPT 团队开发,免费使用,堪称辅助神器!
  3. 2万月薪的开发想拿3万,怎么办?
  4. python多人聊天室_python实现简单多人聊天室
  5. 代码下载淘宝天猫的产品主图视频和详情页视频
  6. 自学考试——网络经济与企业管理
  7. INA226做功率检测模块
  8. 2023自动化毕业设计选题
  9. ios swift UITabBarController present dismiss
  10. 计算机管理员被隐藏,怎么隐藏管理员账户?隐藏管理员账户的操作方法