文件系统
一、文件系统
文件系统是操作系统用于管理磁盘上文件的方法和数据结构;简单点说就是在磁盘上如何组织文件的方法。
二、文件组织形式
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;
}