网站电子报怎么做,怎样自己做网站推广,提供零基础网站建设教学公司,天津网络关键词优化文章目录 1. C语言1.1 打开并读取文件1.2 写入文件1.3 读取二进制文件1.4 写入二进制文件1.5 文件指针的移动 2. C2.1 包含头文件2.2 打开文件2.3 检查文件是否成功打开2.4 读取文件2.5 写入文件2.6 关闭文件2.7 文件指针的移动和获取位置2.8 实例 3. C语言和C文件打开模式4. M… 文章目录 1. C语言1.1 打开并读取文件1.2 写入文件1.3 读取二进制文件1.4 写入二进制文件1.5 文件指针的移动 2. C2.1 包含头文件2.2 打开文件2.3 检查文件是否成功打开2.4 读取文件2.5 写入文件2.6 关闭文件2.7 文件指针的移动和获取位置2.8 实例 3. C语言和C文件打开模式4. MFC4.1 头文件4.2 打开文件4.3 写入文件4.4 读取文件4.5 关闭文件 1. C语言
在C语言中文件访问是通过一系列标准库函数来完成的这些函数被定义在stdio.h标准输入输出库头文件中。 文件的访问主要通过以下几个函数实现
函数说明fopen()打开一个文件fclose()关闭一个文件fread()读取文件fwrite()写入文件fseek()移动文件指针到指定位置ftell()获取文件指针当前位置fgetc()从文件中读取一个字符fputc()写入一个字符到文件中
Note通过文件指针来实现文件的访问。 打开文件 FILE *fopen(const char *filename, const char *mode); 此函数打开一个文件并返回一个文件指针该文件指针可用于后续的文件操作。如果文件无法打开则返回NULL。 filename 是文件名可以包含路径。mode 是打开文件的模式例如 “r”只读、“w”只写创建新文件或覆盖旧文件、“a”追加写入数据到文件末尾、“r”读写等。 关闭文件 int fclose(FILE *stream); 此函数关闭一个打开的文件。如果成功关闭文件则返回0否则返回EOF一个定义在stdio.h中的特殊值表示文件结束或发生错误。 读取文件 size_t fread(void *ptr, size_t size, size_t count, FILE *stream); 此函数从文件中读取数据。函数返回实际读取的数据项的数量如果发生错误或到达文件末尾则可能小于count。 ptr 是一个指向内存块的指针该内存块用于存储从文件中读取的数据。size 是每个数据项的大小以字节为单位。count 是要读取的数据项的数量。stream 是文件指针。 写入文件 size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream); 此函数将数据写入文件。函数返回实际写入的数据项的数量如果发生错误则可能小于count。 ptr 是一个指向要写入文件的数据的指针。size、count 和 stream 的含义与fread相同。 文件定位 int fseek(FILE *stream, long offset, int whence); 此函数设置文件位置指针。如果成功则返回0否则返回非零值。 offset 是相对于whence指定的位置的偏移量以字节为单位。whence 可以是 SEEK_SET文件开头、SEEK_CUR当前位置或 SEEK_END文件末尾。 获取当前位置 long ftell(FILE *stream); 此函数返回文件位置指针的当前位置以字节为单位。如果发生错误则返回-1L。 检查文件结束 int feof(FILE *stream); 此函数检查文件是否已到达末尾。如果到达末尾则返回非零值否则返回0。 清除文件结束和错误标志 void clearerr(FILE *stream); 此函数清除与stream关联的文件结束和错误标志。 检查文件错误 int ferror(FILE *stream); 此函数检查与stream关联的文件是否发生错误。如果发生错误则返回非零值否则返回0。 格式化输出或输入 int fscanf(FILE *fp, char *format, …); int fprintf(FILE *fp, char *format, …); 行输入和输出 char *fgets(char *line, int maxline, FILE *fp) int fputs(char *line, FILE *fp)
1.1 打开并读取文件
#include stdio.h
#include stdlib.hint main() {FILE *file fopen(test.txt, r);if (file NULL) {printf(无法打开文件\n);return -1;}char ch;while ((ch fgetc(file)) ! EOF) {printf(%c, ch);}fclose(file);return 0;
}1.2 写入文件
#include stdio.h
#include stdlib.hint main() {FILE *file fopen(test.txt, w);if (file NULL) {printf(无法打开文件\n);return -1;}fputc(A, file);fputc(B, file);fclose(file);return 0;
}1.3 读取二进制文件
#include stdio.h
#include stdlib.htypedef struct {int a;char b;
} Data;int main() {FILE *file fopen(test.bin, rb);if (file NULL) {printf(无法打开文件\n);return -1;}Data data;fread(data, sizeof(Data), 1, file);printf(a: %d, b: %c\n, data.a, data.b);fclose(file);return 0;
}1.4 写入二进制文件
#include stdio.h
#include stdlib.htypedef struct {int a;char b;
} Data;int main() {FILE *file fopen(test.bin, wb);if (file NULL) {printf(无法打开文件\n);return -1;}Data data {1, A};fwrite(data, sizeof(Data), 1, file);fclose(file);return 0;
}1.5 文件指针的移动
#include stdio.h
#include stdlib.hint main() {FILE *file fopen(test.txt, r);if (file NULL) {printf(无法打开文件\n);return -1;}fseek(file, 2, SEEK_SET); // 将文件指针移动到第3个字符的位置printf(%c\n, fgetc(file));fclose(file);return 0;
}2. C
在C中文件访问与C语言非常相似因为C是在C语言的基础上构建的并保留了C语言的大部分I/O功能。C使用相同的文件操作函数这些函数在或stdio.h头文件中定义。然而C还提供了自己的文件流类如std::ifstream、std::ofstream和std::fstream这些类位于头文件中提供了更加面向对象的文件操作方式。
2.1 包含头文件
#include fstream2.2 打开文件
使用 std::ifstream输入文件流或 std::ofstream输出文件流来打开文件。例如
std::ifstream inputFile(input.txt); // 打开文件以进行读取
std::ofstream outputFile(output.txt); // 打开文件以进行写入可以使用 std::fstream文件流来同时读取和写入文件。
2.3 检查文件是否成功打开
可以通过检查文件流对象是否有效来确认文件是否成功打开。
if (!inputFile) {std::cerr 无法打开文件\n;return 1;
}2.4 读取文件
使用 运算符或 getline() 函数来从文件中读取数据。
int number;
inputFile number; // 读取一个整数std::string line;
std::getline(inputFile, line); // 读取一行文本2.5 写入文件
使用 运算符来将数据写入文件。
outputFile Hello, World!\n; // 写入一行文本
outputFile 42; // 写入一个整数2.6 关闭文件
当文件流对象超出范围或被销毁时文件会自动关闭。但是你也可以显式地调用 close() 方法来关闭文件。
outputFile.close();2.7 文件指针的移动和获取位置
使用 seekg()对于输入流和 seekp()对于输出流来移动文件指针。使用 tellg()对于输入流和 tellp()对于输出流来获取当前文件指针的位置。
inputFile.seekg(10, std::ios::beg); // 将输入文件的指针移动到第10个字节
std::streampos pos inputFile.tellg(); // 获取当前输入文件的指针位置2.8 实例
//读取文件
#include fstream
#include iostream
#include stringint main() {std::ifstream file(test.txt); // 打开文件以供读取if (!file) { // 检查文件是否成功打开std::cerr 无法打开文件\n;return 1;}std::string line;// 逐行读取文件while (std::getline(file, line)) {std::cout line \n;}file.close(); // 关闭文件return 0;
}//写入文件
#include fstream
#include iostreamint main() {std::ofstream file(test.txt); // 打开文件以供写入如果文件不存在则创建它if (!file) { // 检查文件是否成功打开std::cerr 无法打开文件\n;return 1;}file Hello, World! std::endl; // 写入数据到文件file.close(); // 关闭文件return 0;
}C的文件流类同样支持二进制文件的读写。你可以通过文件流的binary模式标志来指定文件应以二进制模式打开。但是在大多数系统中这并不是必须的因为文件流默认就是二进制安全的。然而在某些情况下特别是跨平台操作时明确指定二进制模式可能是有必要的。
std::ifstream file(test.bin, std::ios::binary); // 以二进制模式打开文件
// ... 读取操作 ...std::ofstream file(test.bin, std::ios::binary); // 以二进制模式打开文件
// ... 写入操作 ...note:使用文件流类进行文件操作通常比使用C风格的函数更加直观和易于管理因为它们提供了更丰富的错误处理和更面向对象的接口。此外文件流还支持更多的操作如格式化输入/输出、操纵符重载等.
3. C语言和C文件打开模式
C和C语言在文件打开模式上有很多相似之处但由于C提供了更高级的封装其使用方式略有不同。以下是一个简化的表格列出了C和C语言中常用的文件打开模式
模式描述C示例C示例“r”以只读方式打开文件文件必须存在std::ifstream file(“test.txt”, std::ios::in);FILE *file fopen(“test.txt”, “r”);“w”以写入方式打开文件如果文件不存在则创建新文件如果文件已存在则清空内容std::ofstream file(“test.txt”, std::ios::out);FILE *file fopen(“test.txt”, “w”);“a”以追加方式打开文件如果文件不存在则创建新文件如果文件已存在则在文件末尾追加内容std::ofstream file(“test.txt”, std::ios::out/std::ios::app);FILE *file fopen(“test.txt”, “a”);“r”以读写方式打开文件文件必须存在std::fstream file(“test.txt”, std::ios::in/std::ios::out);FILE *file fopen(“test.txt”, “r”);“w”以写读方式打开文件如果文件不存在则创建新文件如果文件已存在则清空内容std::fstream file(“test.txt”, std::ios::in/std::ios::out/std::ios::truncFILE *file fopen(“test.txt”, “w”);“a”以追加写读方式打开文件如果文件不存在则创建新文件如果文件已存在则在文件末尾追加内容std::fstream file(“test.txt”, std::ios::in /std::ios::out)“b”以二进制模式打开文件可以与上述模式组合使用std::ifstream file(“test.bin”, std::ios::in/std::ios::binary);
4. MFC
在MFCMicrosoft Foundation Classes中CFile 类是一个用于文件操作的封装类它提供了比标准C语言I/O函数更高级和面向对象的接口。使用 CFile 类你可以更方便地打开、读取、写入和关闭文件。
4.1 头文件
#include afxwin.h // MFC 头文件
#include afx.h // 包含CFile类的定义4.2 打开文件
CFile file(_T(example.txt), CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive);
if (!file.Open()) {AfxMessageBox(_T(无法打开文件));return;
}试图以创建如果不存在、写入和独占模式打开一个名为 example.txt 的文件。如果文件打开失败显示一个消息框。
4.3 写入文件
CString str _T(Hello, World!);
ULONGLONG pos file.GetPosition(); // 获取当前文件指针位置
file.Write(str, (UINT)str.GetLength() * sizeof(TCHAR)); // 写入字符串到文件
file.Seek(pos, CFile::begin); // 如果需要可以将文件指针移回原位将一个字符串写入文件。Write 函数需要两个参数要写入的数据的指针和要写入的数据的大小以字节为单位。
4.4 读取文件
ULONGLONG len file.GetLength(); // 获取文件长度
if (len 0) {CFileException e;char* buffer new char[len];try {file.Read(buffer, len); // 读取整个文件}catch (CFileException* pEx) {e *pEx;pEx-Delete();// 处理异常}// 使用 buffer 中的数据...delete[] buffer; // 释放内存
}在这个例子中我们首先获取文件的长度然后分配足够的内存来存储整个文件的内容。我们使用 Read 函数来读取文件内容。注意我们使用 CFileException 来处理可能发生的异常。
4.5 关闭文件
file.Close(); // 关闭文件在完成文件操作后使用 Close 函数关闭文件。虽然 CFile 的析构函数会自动关闭文件如果尚未关闭但显式关闭文件是一个好习惯。
MFC 主要用于Windows桌面应用程序的开发并且依赖于Microsoft的Visual C环境。如果你正在开发跨平台应用程序或不想依赖MFC那么使用标准C的 库可能是更好的选择。