当前位置:   article > 正文

Windows下文件操作总结_winqfile.zip

winqfile.zip

目录

C语言文件操作

  

C++文件操作

文本文件

写文件

读文件

二进制文件

写文件

读文件

Windows API 文件操作

windows API的写文件

windows API的读文件

MFC文件操作 

读文件

 写文件

Qt文件操作

1.创建并打开文件.

2.判断文件是否存在.

3.拷贝文件.

4.给文件重命名

5.获取用户对指定文件的权限,是否可读

6.写入文件

7. 读取文件数据

8.删除文件

9.获取文件夹下所有文件


C语言文件操作

C语言文件流类型 FILE ,一般定义为指针类型,文件操作主要使用以下API

fopen   fopen_s   fwrite  fputs  fread  fgets   fgetc  fseek

fseek用来调整文件指针的位置,原型如下

fseek(

        _Inout_ FILE* _Stream, //指向FILE结构体指针

        _In_    long  _Offset, //偏移量

        _In_    int   _Origin  //指定文件指针的起始位置  //SEEK_CUR  当前位置

                                        //SEEK_END  文件结尾位置  SEEK_SET 文件开始位置

        );

C语言打开文件的方式如下

请添加图片描述

示例代码如下

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. FILE* fp;
  6. char msg[256];
  7. #ifdef DEBUG
  8. //写文件
  9. fopen_s(&fp,"test.txt", "w+");
  10. fgets(msg, 255, stdin);
  11. #endif
  12. #ifdef DEBUG
  13. //追加写
  14. fopen_s(&fp, "test.txt", "a");
  15. fgets(msg, 255, stdin);
  16. fwrite(msg, 1, strlen(msg), fp);
  17. #endif
  18. //指定位置写
  19. fopen_s(&fp, "test.txt", "r+");
  20. fgets(msg, 255, fp);
  21. fseek(fp, 3, SEEK_SET);
  22. fwrite(msg, 1, strlen(msg), fp);
  23. //读文件
  24. fread(msg, 1, sizeof(msg), fp);
  25. printf("%s", msg);
  26. if(fp) fclose(fp);
  27. return 0;
  28. }

 
 

C++文件操作

操作文件的三大类:

ofstream: 写操作
ifstream: 读操作
fstream: 读写操作


文本文件


写文件


写文件步骤如下:

包含头文件
#include < fstream >


创建流对象
ofstream ofs;


打开文件
ofs.open(“文件路径” , 打开方式);


写数据
ofs<<“写入的数据”;


关闭文件
ofs.close();

打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios:app追加方式写文件
ios::trunc如果文件存在,先删除,后创建
ios::binary二进制方式

读文件


读文件步骤如下:

包含头文件
#include < fstream >


创建流对象
ifstream ifs;


打开文件并判断文件是否打开成功
ifs.open(“文件路径” , 打开方式);


读数据
四种读取方式


关闭文件
ifs.close();


文件的四种读取方式:

  1. char buf[1024] = {0};
  2. while( ifs >> buf ){
  3. cout << buf << endl;
  4. char buf[1024] = {0};
  5. while( ifs.getline(buf, sizeof(buf)) ){
  6. cout << buf << endl;
  7. }
  8. string buf;
  9. while(getline(ifs,buf)){
  10. cout << buf << endl;
  11. }
  12. char c;
  13. while( (c = ifs.get()) != EOF ){
  14. cout << buf << endl;
  15. }

二进制文件


以二进制的方式对文件进行读写操作;
打开方式要指定为 ios::binary

写文件


写文件步骤如下:

包含头文件
#include < fstream >


创建流对象
ofstream ofs;


打开文件
ofs.open(“文件路径” , ios::out | ios::binary );


写数据
Person p = new Person(“张三”,17);
ofs.write((const char*)&p , sizeof(Person) );


关闭文件
ofs.close();


读文件


读文件步骤如下:

包含头文件
#include < fstream >


创建流对象
ifstream ifs;


打开文件并判断文件是否打开成功


ifs.open(“文件路径” , ios::in | ios::binary );


读数据
Person p;


ifs.read((const *)&p, sizeof(Person))


关闭文件
ifs.close();


 

Windows API 文件操作

win32 主要使用  CreateFile ReadFile WriteFile 三个api 进行文件操作

CreateFile

     CreateFileW(

         _In_ LPCWSTR lpFileName,//创建或打开的对象的名称

         _In_ DWORD dwDesiredAccess,//访问方式 读,读-写 写 查询 0 GENERIC_READ GENERIC_WRITE

         _In_ DWORD dwShareMode,//共享方式 0

         _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,//NULL 不能被子进程继承

         _In_ DWORD dwCreationDisposition,//如何创建文件 CREATE_NEW CREATE_ALWAYS

         _In_ DWORD dwFlagsAndAttributes,//设置文件的属性和标志

         _In_opt_ HANDLE hTemplateFile//NULL

     );

BOOL WriteFile(

         HANDLE       hFile,

         LPCVOID      lpBuffer,

         DWORD        nNumberOfBytesToWrite,//要写入的字节数

         LPDWORD      lpNumberOfBytesWritten, //用来接收实际写入到文件的字节数

         LPOVERLAPPED lpOverlapped

     );

windows API的写文件

  1.   HANDLE hFile;
  2.      hFile = CreateFile(_T("3.txt"), GENERIC_WRITE, 0, NULL,
  3.          CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
  4.      if (hFile == INVALID_HANDLE_VALUE)
  5.      {
  6.          TRACE("INVALID_HANDLE_VALUE,ERRORCODE = %d",GetLastError());
  7.          return;
  8.      }
  9.     
  10.      DWORD dwWrites;
  11.      WriteFile(hFile, "BingoWin32API", strlen("BingoWin32API"), &dwWrites, NULL);
  12.      TRACE("##dwWrites = %d", dwWrites);
  13.      CloseHandle(hFile);

   

windows API的读文件

  1. HANDLE hFile;
  2. hFile = CreateFile(_T("3.txt"), GENERIC_READ, 0, NULL,
  3.      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  4. char pBuf[100] = {0};
  5. DWORD dwReads;
  6. ReadFile(hFile, pBuf, 100, &dwReads, NULL);
  7. TRACE("##dwReads = %d", dwReads);
  8. CloseHandle(hFile);

MFC文件操作 

读文件

  1. CFileDialog fileDlg(TRUE);
  2. fileDlg.m_ofn.lpstrTitle = "Test";
  3. fileDlg.m_ofn.lpstrFilter = "Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
  4. if (IDOK == fileDlg.DoModal())
  5. {
  6. CFile file(fileDlg.GetFileName(), CFile::modeRead);
  7. char szBuf[1024] = { 0 };
  8. DWORD dwFilelen;
  9. dwFilelen = file.GetLength();
  10. file.Read(szBuf, dwFilelen);
  11. file.Close();
  12. MessageBox(szBuf);
  13. }

 写文件

  1. CFile file("4.txt",CFile::modeCreate|CFile::modeWrite);
  2. char szBuf[1024] = "MFC操作文件";
  3. file.Write(szBuf, strlen(szBuf));
  4. file.Close();

Qt文件操作

在QT中,我们时常要对文件进行各种操作,比如文件的创建、写入、拷贝和删除等等,这些都要用到QFile类。

QFile类提供了读写文件的接口。一般情况下,我们可以直接在调用构造函数的时候传递文件名,这是比较方便的方法。或者使用QFile创建对象,再调用setFileName()方法来设置文件路径。其中文件名中的路径分隔符要求必须是'/',其他分隔符QFile不支持。

常用接口

QFile构造函数:

QFile(const QString & name)

QFile(QObject * parent)

QFile(const QString & name, QObject * parent)

1.创建并打开文件.

  1. //初始化时加载文件路径
  2. QFile file("F:/test/xxx.txt");
  3. //以读写的方式打开文件,成功返回true,失败返回false
  4. //想用其他方式打开文件,请看上面的文件打开模式
  5. bool ok = file.open(QIODevice::ReadWrite);
  6. //如果文件不存在,则创建并打开该文件

2.判断文件是否存在.

  1. //判断指定文件是否存在.也可以用来判断在指定路径下是否有文件和你将要创建的文件重名.
  2. //存在返回true,不存在返回false
  3. bool exist = QFile::exists("F:/test/xxx.txt");

3.拷贝文件.

  1. //把D盘里的xxx.txt拷贝到到F盘,命名为sss.txt
  2. //拷贝成功返回true,失败返回false
  3. bool ok = QFile::copy("D:/xxx.txt", "F:/sss.txt");

4.给文件重命名

  1. QFile file("F:/xxx.txt");
  2. bool ok = file.rename("F:/sss.txt");
  3. //重命名成功返回true,失败返回false
  4. //也可以直接调用
  5. bool ok = QFile::remove("F:/xxx.txt", "F:/sss.txt");

5.获取用户对指定文件的权限,是否可读

  1. QFlags<QFileDevice::Permission> power = QFile::permissions("F:/xxx.txt");
  2. //判断文件所有者是否可读
  3. if (power.testFlag(QFile::ReadOwner))
  4. qDebug("Can Read!");

6.写入文件

  1. //定义文件内容字符串
  2. QString str= "写入文件的内容";
  3. QFile file("F:/xxx.txt");
  4. //打开文件,不存在则创建
  5. file.open(QIODevice::ReadWrite | QIODevice::Text);
  6. //写入文件需要字符串为QByteArray格式
  7. file.write(str.toUtf8());
  8. file.close();

7. 读取文件数据

  1. //先打开文件
  2. QFile file("F:/xxx.txt");
  3. file.open(QIODevice::ReadOnly | QIODevice::Text);
  4. //使用QTextStream一行一行读取文件
  5. QTextStream in(&file);
  6. while (!in.atEnd())
  7. {
  8. QString line = in.readLine(); //整行读取
  9. qDebug() << line;
  10. }

8.删除文件

  1. QFile file("F:/xxx.txt");
  2. bool ok = file.remove();
  3. //删除成功返回true,失败返回false
  4. //也可以直接调用
  5. bool ok = QFile::remove("F:/xxx.txt");

9.获取文件夹下所有文件

  1. QDir *dir = new QDir("F:/");
  2. QStringList filters;
  3. filters << "*.png" << "*.jpg" << "*.bmp"; //过滤器,过滤你想要的文件后缀
  4. //用链表保存过滤的文件名
  5. QList<QFileInfo> *fileInfo = new QList<QFileInfo>(dir->entryInfoList(filters));
  6. //获取文件数目、文件名称
  7. for(int i = 0; i < fileInfo->count(); i++)
  8. {
  9. //QFileInfo(路径名的Qstring字符串).filename可以直接取到路径中的文件名
  10. qDebug() << fileInfo->at(i).fileName();
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/182975
推荐阅读
相关标签
  

闽ICP备14008679号