文件系统

一、文件系统

文件系统是操作系统用于管理磁盘上文件的方法和数据结构;简单点说就是在磁盘上如何组织文件的方法。

二、文件组织形式

1、卷(我们日常所称的C盘D盘等)

2、目录

3、文件

三、卷

1、获取卷

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	DWORD dwLogicalDrives = GetLogicalDrives();
	printf("%d",dwLogicalDrives);
	getchar();
	return 0;
}

2、获取卷的字符串(默认没有设置卷名,就是C盘或者D盘,如果设置了就是其他)

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	// 获取最大值
	DWORD dwMaxLength = 100;
	// 缓冲
	char szBuffer[100];
	//将获取的字符串放到缓冲里
	GetLogicalDriveStrings(dwMaxLength,szBuffer);
	printf("%s",szBuffer);
	getchar();
	return 0;
}

3、获取卷的类型(光驱为5)

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
	UINT uType = GetDriveType("C:\\");
	printf("%d",uType);
	getchar();
	return 0;
}

4、获取卷的信息

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	TCHAR szUolumneName[260] = {0};
	DWORD dwVolumneSerial	=	0;
	DWORD dwMaxLength		=	0;
	DWORD dWFileSystem		=	0;
	TCHAR szFi1eSystem[260] =	{0};

	GetVolumeInformation(
		"C:\\",					//IN  磁盘驱动器代码字符串
		szUolumneName,			//OUT 磁盘驱动器卷标名称,
		260,					//IN  磁盘驱动器卷标名称长度
		&dwVolumneSerial,		//OUT 磁盘驱动器卷标序列号(不是硬盘序列号,硬盘序列号是硬盘出厂时生产厂家为区别产品而设置的,就像人的省份证一样独一无二,卷标序列号删除了卷,重新创建卷标序列号会改变)
		&dwMaxLength,			//OUT 系统允许的最大文件名长度
		&dWFileSystem,			//OUT 文件系统标识
		szFi1eSystem,			//OUT 文件操作系统名称(是NTFS还是FAT32)
		260						//IN  文件操作系统名称长度
	);


	printf("Name=%s\nSerial=%08X\nLength=%d\ndWFileSystem=%08X\n%s",szUolumneName,dwVolumneSerial,dwMaxLength,dWFileSystem,szFi1eSystem);
	getchar();
	return 0;
}

四、目录

1、创建目录

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
	CreateDirectory(
		"C:\\A",
		NULL		//安全描述符
	);
	getchar();
	return 0;
}

2、删除目录

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{


	RemoveDirectory("C:\\A");
	getchar();
	return 0;
}

3、修改目录名称

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{


	CreateDirectory("C:\\A",NULL);
	MoveFile("C:\\A","C:\\B");

	return 0;
}

4、获取当前目录

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	//MAX_PATH相当于260
	CHAR szCurrentDirectoryPath[MAX_PATH] = {0};
	GetCurrentDirectory(MAX_PATH,szCurrentDirectoryPath);
	printf("%s",szCurrentDirectoryPath);
	getchar();

	return 0;
}

5、设置当前目录

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	
	SetCurrentDirectory("C:\\");
	CreateDirectory("A",NULL);
	getchar();

	return 0;
}

五、文件

1、创建文件

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	HANDLE hFile = CreateFile(
		"C:\\A.TXT",
		GENERIC_READ|GENERIC_WRITE,		//读写权限
		0,					//0为排它,只有当我对这个文件完成操作关闭之后别人才能访问			
		NULL,
		CREATE_ALWAYS,				//创建方法,CREATE_ALWAYS不管文件存不存在,都创建
		FILE_ATTRIBUTE_HIDDEN,			//FILE_ATTRIBUTE_HIDDEN为隐藏文件创建
		NULL
	);
	getchar();

	return 0; 
}

2、关闭文件

CloseHandle(hFile)

3、文件大小

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{

	HANDLE hFile = CreateFile(
		"C:\\notepad.exe",
		GENERIC_READ|GENERIC_WRITE,		//读写权限
		0,					//0为排它,只有当我对这个文件完成操作关闭之后别人才能访问			
		NULL,
		OPEN_EXISTING ,				//打开文件
		FILE_ATTRIBUTE_HIDDEN,			//FILE_ATTRIBUTE_HIDDEN为隐藏文件创建
		NULL
	);

	DWORD dwHigh = 0;
	DWORD dwLow  = GetFileSize(hFile,&dwHigh);

	printf("%d",dwLow);
	getchar();

	return 0; 
}

4、文件属性信息

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
	WIN32_FILE_ATTRIBUTE_DATA data = {0};
	GetFileAttributesEx("C:\\notepad.exe",GetFileExInfoStandard,&data);

	printf("Attri=%d\n",data.dwFileAttributes);				// 属性是由一堆宏拼出来的
	printf("SizeHigh=%d\n",data.nFileSizeHigh);				// 32位里面一直为空
	printf("SizeLow=%d\n",data.nFileSizeLow);			    // 文件大小
	printf("CreationTime=%d\n",data.ftCreationTime);		// 创建时间
	printf("LastAccessTime=%d\n",data.ftLastAccessTime);	// 最后访问时间
	printf("LastWriteTime=%d\n",data.ftLastWriteTime);		// 最后修改时间(转为正确的操作系统时间需要用函数FileTimeToSystemTime)
	getchar();

	return 0; 
}

5、读取文件

#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
int main(int argc, char* argv[])
{
	HANDLE hFile = CreateFile(
		"C:\\1.TXT",
		GENERIC_READ|GENERIC_WRITE,		//读写权限
		0,					//0为排它,只有当我对这个文件完成操作关闭之后别人才能访问			
		NULL,
		OPEN_EXISTING,				
		FILE_ATTRIBUTE_HIDDEN,			//FILE_ATTRIBUTE_HIDDEN为隐藏文件创建
		NULL
	);

	//分配空间
	LPSTR pszBuffer = (LPSTR)malloc(100);
	//初始化为0
	ZeroMemory(pszBuffer,0);
	//设置当前读取位置,hFile为从哪开始,1为从第一个字节开始,NULL为读多少,FILE_BEGIN为从开头
	SetFilePointer(hFile,1,NULL,FILE_BEGIN);
	//读取数据
	DWORD dwReadLength = 0;
	ReadFile(hFile,pszBuffer,11,&dwReadLength,NULL);
	printf("%s",pszBuffer);
	//释放内存
	free(pszBuffer);
	//关闭文件
	CloseHandle(hFile);

	getchar();
	return 0; 
}

posted @ 2021-12-24 16:33  lnterpreter  阅读(262)  评论(0编辑  收藏  举报