Windows文件、目录操作函数

1、文件操作函数

      CreateFile();//创建或打开文件
      ReadFile();//从文件读
      WriteFile();//向文件写
      SetFilePointer();//设置文件指针

      SetEndOfFile();//将指定文件的物理文件大小设置为当前文件指针的位置,其主要用来截取或扩展文件。
      CopyFile();//复制文件
      MoveFile();//移动或重命名文件

      DeleteFile();//删除文件

windows文件操作示例:

	//OPEN_ALWAYS:打开文件,如果文件不存在则创建
	//OPEN_EXISTING:打开现有文件,如果文件不存在则失败
	//TRUNCATE_EXISTING: 打开现有文件并将文件截取为零,如果文件不存在则失败
	//CREATE_ALWAYS: 创建文件,如果文件存在则清空。
	//CREATE_NEW: 创建文件,如果文件存在则会失败
	HANDLE hFile = CreateFileA("data.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
	if (hFile == INVALID_HANDLE_VALUE)
	{
		DWORD dwErrno = GetLastError();
		printf("CreateFile failed: %u\n", dwErrno);
	}

	//获得文件大小
	LARGE_INTEGER liFileSize = {0};
	GetFileSizeEx(hFile, &liFileSize);
	LONGLONG llFileSize = liFileSize.QuadPart;

	//移动到文件末尾
	LARGE_INTEGER liMoveLen = {0};
	liMoveLen.QuadPart = 0;
	LARGE_INTEGER liNewFilePoint = {0};
	SetFilePointerEx(hFile, liMoveLen, &liNewFilePoint, FILE_END/*FILE_END、FILE_CURRENT*/);
	DWORD dwSeek = (DWORD)liNewFilePoint.QuadPart;

	//读取文件内容
	char bufRead[12] = { 0 };
	DWORD dwReadBytes = 0;
	ReadFile(hFile, bufRead, 1, &dwReadBytes, NULL);

	//向文件写入内容
	char bufWrite[12] = "h";
	DWORD WriteBytes = 0;
	WriteFile(hFile, bufWrite, strlen(bufWrite), &WriteBytes, NULL);

	//关闭文件
	CloseHandle(hFile);

linux文件打开的标志:

	open("pathname", O_WRONLY); //打开文件,若文件不存在则出错
        open("filename", O_RDWR | O_CREAT); //打开文件,若文件不存在则创建该文件
        open("filename", O_RDWR | O_APPEND | O_CREAT); //打开文件并移动文件指针到末尾,若文件不存在则创建该文件 
        open("filename", O_WRONLY | O_TRUNC | O_CREAT); //打开文件并清空文件内容,若文件不存在则创建该文件
        open("filename", O_CREAT | O_EXCL | O_RDONLY); //创建文件,若文件存在则出错,也常用来测试文件是否存在

2、文件属性函数

      GetFileSize()、GetFileSizeEx();//获取文件大小,推荐使用GetFileSizeEx()
      GetFileTime();//获取文件或目录的时间信息,如创建时间、最后修改时间、最后访问时间
      SetFileTime();//设置文件或目录的时间信息
      GetFileAttributes() / GetFileAttributesEx();//获取文件属性
      SetFileAttributes();//设置文件属性

3、文件的遍历和查找

      FindFirstFile();//查找第一个文件
      FindNextFile();//查找下一个文件
      FindClose();//关闭查找

4、目录操作函数

      CreateDirectory();//创建目录,只能创建一层目录
      RemoveDirectory();//删除一个空目录

5、判断文件或目录是否存在   

       以下转载自:http://liuzhigong.blog.163.com/blog/static/178272375201171594820785/

      ①、C中函数access()可以用来判断文件或文件夹是否存在。

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

       所属头文件:#include

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

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

                     2 (R_OK) 判断写入权限

                     4 (W_OK) 判断读取权限

                     6 (X_OK) 判断执行权限

       用于判断文件夹是否存在的时候,mode取0,判断文件是否存在的时候,mode可以取0、2、4、6。 若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。

       错误代码

       EACCESS 参数pathname 所指定的文件不符合所要求测试的权限。

       EROFS 欲测试写入权限的文件存在于只读文件系统内。

       EFAULT 参数pathname指针超出可存取内存空间。

       EINVAL 参数mode 不正确。

       ENAMETOOLONG 参数pathname太长。

       ENOTDIR 参数pathname为一目录。

       ENOMEM 核心内存不足

       ELOOP 参数pathname有过多符号连接问题。

       EIO I/O 存取错误。

       特别提醒:使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。

       ②、VC下的GetFileAttributes()可以用来判断文件或文件夹是否存在,存在的话返回文件属性值(可以用来判断是文件还是文件夹),不存在返回INVALID_FILE_ATTRIBUTES。

6、获取指定的目录

       GetCurrentDirectory();//获得当前目录
       SetCurrentDirectory();//设置当前目录判断
       GetSystemDirectory();//获得Windows系统目录
       GetWindowsDirectory()//获得Windows目录
       GetTempPath();//获取Windows临时文件目录

       GetFullPathName()//获取指定文件的全路径
       SHGetSpecialFolderLocation()函数可以获取Windows桌面目录、启动目录、我的文档目录等

       第一个参数为“所有者窗口”,调用这个函数的时候可能出现对话框或消息框。

       第二个参数是一个整数id,决定哪个目录是待查找目录,它的取值可能是

       CSIDL_BITBUCKET 回收站  
       CSIDL_CONTROLS  控制面板
       CSIDL_DESKTOP   Windows桌面Desktop
       CSIDL_DRIVES    我的电脑
       CSIDL_FONTS     字体目录
       CSIDL_NETHOOD   网上邻居
       CSIDL_NETWORK   网上邻居虚拟目录
       CSIDL_PERSONAL  我的文档
       CSIDL_PRINTERS  打印机
       CSIDL_PROGRAMS  程序组
       CSIDL_RECENT    最近打开文档
       CSIDL_SENDTO    发送到"菜单项"
       CSIDL_STARTMENU 任务条启动菜单项
       CSIDL_STARTUP   启动目录
       CSIDL_TEMPLATES 临时文档

       第三个参数为pidl地址. SHGetSpecialFolderLocation把地址写到pidl

原文地址:http://wenku.baidu.com/link?url=98h1Wqau6ZXFTJQsiH6aS6OIvj0K6mW97_L4bXRDYB9f2YBiUtT7Jyk5yS5Odq0jBw48LdytxFbJqoVXg3jIliG2H8lOZ1eQ04zsBYudWgK

7、缩写的全路径和不缩写的全路径

GetLongPathName()将文件全路径转换为不缩写的全路径。

GetLongShortName()将文件全路径转换为缩写的全路径。

这两个函数极其重要!!!很多人写程序时不注意这一点——包括我,比如,使用GetModuleFileName获取文件路径,我们一般都将获取到的路径直接拿来用。在99.9%的情况下,我们获取到的是没有缩写的全路径,但是,某些情况下,获取到的却是缩写的,例如,

C:\Prog~1\Comm~1\aaa~1.exe

如果这个时候,取进程的名称,将得到aaa~1.exe,很明显,这种结果是我们所不愿意看到的,它会导致很严重的问题,而这种错误又是极其难以查找的。

所以,个人认为,在获取文件全路径后,都应该调用GetLongPathName,以便保证得到的路径不是缩写形式。

8、C/C++中文件、目录操作函数

remove():删除一个文件或目录。

rename():重命名或移动(如果系统支持的话)一个文件或目录


      

你可能感兴趣的:(windows程序设计)