读写操作 | 含义 |
r | 只读 |
w | 重新写入,即如果文件已存在,则覆盖写入 |
a | add,追加,在文件后追加 |
r+ | 以可读可写操作打开 |
w+ | 以可读可写操作打开,并重新写入 |
a+ | 以可读可写操作打开,并且追加 |
1.写操作
FILE* pFile = fopen("1.txt", "w");
- char szBuff[100] = "C语言写文件";
- int ret=fwrite(szBuff, 1, strlen(szBuff)+1, pFile);
fwrite第一个参数表示字符串,第二个表示每个字符的大小,第三个表示字符串总长度,第四个表示文件地址
测试是否成功
- if (fwrite (szBuff, 1, iLen, pFile) < 0 )
- {
- MessageBox( "失败");
- }
为什么不是小于等于0呢,因为这个写操作是可以等于0的,哪些情况可以等于0呢?我提了个相关问题,可以参考一下。
2.读操作
FILE* pFile = fopen("1.txt", "r");
- fseek(pFile, 0, SEEK_END); /求文件偏移量
- char Readbuf[1024] = { 0 };
- fseek(pFile, 0, SEEK_SET); /将文件指针重新指向开头
- int len = ftell(pFile); /得到文件指针当前位置
- int iLen = fread(Readbuf, 1, len, pFile);
将文件读取到readbuf中,读取大小为len
这两个都要包含头文件<fstream>
1.写操作
- std::ofstream ofs("2.txt"); /表示文件名
- char szBuff[] = "C++写文件";
- ofs.write(szBuff, strlen(szBuff));
- ofs.close();
2.读操作
- std::ifstream ifs("2.txt");
- char szBuff[100]{};
- ifs.read(szBuff, 100);
- ifs.close();
- MessageBox(szBuff);
写操作1.CreateFile,第二个参数表示访问方式,第三个表示共享方式,第四个为安全属性,第五个为如何创建文件,第六个设置文件属性和标志
- HANDLE hfile;
- hfile = CreateFile("3.txt", GENERIC_WRITE, NULL, NULL,
- OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2.判断函数
- if (hfile==INVALID_HANDLE_VALUE)
- {
- TRACE("ERROR:%d\n", GetLastError());
- MessageBox("创建文件对象失败");
- return;
- }
3.写入数据
- char szBuff[1024] = "WIN32写文件";
- DWORD dWrites;
- /第三个参数表示真正写入的长度
- WriteFile(hfile, szBuff, strlen(szBuff) + 1, &dWrites,NULL);
1.创建文件
- HANDLE hfile;
- hfile = CreateFile("3.txt", GENERIC_READ, NULL, NULL,
- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
第五个参数可选,表示打开i一个已存在的文件
2.读数据
- char szBuff[1024] ={0};
- DWORD dReads;
- ReadFile(hfile, szBuff, 1024, &dReads, NULL);
- CloseHandle(hfile);
- MessageBox(szBuff);
这里将数据读到szBuff中
1.写文件,和C++写操作很类似
- CFile file("4.txt",CFile::modeCreate|CFile::modeWrite);
- char szBuff[] = "MFC写文件";
- file.Write(szBuff, strlen(szBuff));
- file.Close();
2.读文件
- CFile file("4.txt", CFile::modeRead);
- char szBuff[1024]{};
- file.Read(szBuff, 1024);
- file.Close();
- MessageBox(szBuff);
读文件高阶操作
- CFileDialog fileDlg(true);
- fileDlg.m_ofn.lpstrTitle = "Text";
- fileDlg.m_ofn.lpstrTitle =
- "Text Files(*.txt)\0*.txt\0All File(*.*)\0*.*\0\0";
- if (IDOK==fileDlg.DoModal())
- {
- CFile file(fileDlg.GetFileName(), CFile::modeRead);
- DWORD dwfilen = file.GetLength();
- char szBuff[1024]{};
- file.Read(szBuff, dwfilen);
- file.Close();
- MessageBox(szBuff);
- }
第一行代码表示创建一个Cfiledialog文件,第二行表示设置标题,第三行表示设置过滤器,只允许选择 .txt 文件或所有文件