windows文件的常规读写

1、创建隐藏属性的临时文件,且文件被关闭时会自动删除

2、判断访问的文件类型(文件、磁盘、管道等)

3、文件的随机读写操作

4、手动将写入高速缓存中的数据,刷新到磁盘

5、动态调整文件的大小

6、获取文件的逻辑大小或物理大小

	//创建一个文件test.txt(隐藏的临时文件,且文件关闭时会被系统自动删除)
	HANDLE	hFile = CreateFile( TEXT("C:\\test3.txt")
				,GENERIC_WRITE|GENERIC_READ //设备的访问权限
				,FILE_SHARE_WRITE|FILE_SHARE_READ //设备的共享权限
				,NULL
				,CREATE_ALWAYS
				,FILE_ATTRIBUTE_TEMPORARY|FILE_ATTRIBUTE_HIDDEN|FILE_FLAG_DELETE_ON_CLOSE/*|FILE_FLAG_WRITE_THROUGH*/
				,NULL);
	if (hFile == INVALID_HANDLE_VALUE) {
		printf("创建可写文件test.txt文件失败!\n");
		return -1;
	}

	switch(GetFileType(hFile))
	{
	case	FILE_TYPE_DISK:
		printf("访问的文件是一个磁盘文件\n"); break;
	case	FILE_TYPE_CHAR:
		printf("访问的文件是一个字符文件,比如并口设备或控制台\n"); break;
	case	FILE_TYPE_PIPE:
		printf("访问的文件是一个命名管道或匿名管道\n"); break;
	case	FILE_TYPE_UNKNOWN:
		printf("访问的文件为未知类型\n"); break;
	default:
		printf("GetFileType()返回了一个不可预料的类型值\n"); break;
	}

	DWORD	dwSize = 0;
	char pBuf[100] = "使用CreateFile访问文件对象(文件、目录、磁盘驱动器、串口等)";
	WriteFile(hFile, pBuf, strlen(pBuf), &dwSize, NULL);

	//将数据从高速缓存中写入到磁盘上
	//打开文件时指定了FILE_FLAG_NO_BUFFERING或FILE_FLAG_WRITE_THROUGH标记时,写入操作不会写入到缓存,而是
	//直接写入到磁盘,因此,不必手动刷新缓存
	FlushFileBuffers(hFile);
	printf("写入:%s ,%d\n", pBuf, dwSize);

	//从文件的开始14字节后开始写入
	LARGE_INTEGER	liCurrPosition = {0};
	liCurrPosition.QuadPart = 14;
	SetFilePointerEx(hFile, liCurrPosition, NULL, FILE_BEGIN);
	strcpy_s(pBuf, " Randrom Write ");
	WriteFile(hFile, pBuf, strlen(pBuf), &dwSize, NULL);

	//从文件开始位置进行读取
	liCurrPosition.QuadPart = 0;
	SetFilePointerEx(hFile, liCurrPosition, NULL, FILE_BEGIN);

	memset(pBuf, 0, sizeof(pBuf));
	ReadFile(hFile, pBuf, sizeof(pBuf)-1, &dwSize, NULL);
	printf("读取:%s ,%d\n", pBuf, dwSize);

#if 0
	//设置文件大小为1024byte
	LARGE_INTEGER	liCurrentPosition = {0};
	liCurrentPosition.QuadPart = 1024;
	SetFilePointerEx(hFile, liCurrentPosition, NULL, FILE_BEGIN);
	SetEndOfFile(hFile);
#endif

	//获取文件大小
	LARGE_INTEGER	liFileSize = {0};
	GetFileSizeEx(hFile, &liFileSize);
	printf("文件大小: 逻辑大小%dbyte, ", liFileSize.QuadPart);

	GetCompressedFileSize(TEXT("C:\\test.txt"), (DWORD*)&liFileSize.HighPart);
	printf("物理大小%dbyte\n",liFileSize.HighPart);;

	CloseHandle(hFile);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值