C++ 打开文件/读取文件 基本方法与操作 (文件模式、读取方式等)


打开文件有三步:

1. 打开文件的方法

创建一个文件流,并绑定一个文件。

操作说明
fstream fs;创建一个未绑定的流fs
fstream fs(s);创建一个流,并打开名为s的文件,s可以是string或C风格字符串
fstream fs(s, mode);同上,并指定以mode模式打开

如果创建的时候没有绑定,也可以用open()函数打开:

fs.open(s);	//s可以是string或C风格字符串
			//默认的mode依赖于fstream类型

请养成检测open是否成功的习惯!

注意:

一旦一个文件流已经打开,它就保持与对应文件的关联。实际上,对一个已经打开的文件流调用open 会失败,并会导致failbit被置位。随后的试图使用文件流的操作都会失败。为了将文件流关联到另外一个文件,必须首先关闭已经关联的文件。一旦文件成功关闭,我们可以打开新的文件。

1.1 文件模式

也就是之前说的mode,常见的mode如下:

模式说明要求
in不能是ofstream
out写,默认会同时trunc不能是ifstream
app每次写操作都定位到文件末尾
如果只设置了app则默认也指定out
trunc没被设定
ate打开文件后立即定位到文件末尾
trunc截断文件必须设置了out
binary以二进制方式进行IO

如:

ofstream out;
out.open("a.txt", ios::app);
//有时候也用下面的样子:
//out.open("a.txt", ostream::app);

每个文件流类型都定义了一个默认的文件模式,当我们未指定文件模式时,就使用此默认模式。与 ifstream关联的文件默认以in模式打开;与ofstream关联的文件默认以out模式打开;与fstream 关联的文件默认以in和 out模式打开。

如果我们想自己指定文件模式,则需要遵循上表规则。

注意:ofstream打开一个文件时,文件的内容会被丢弃,阻止一个ofstream清空的唯一方式是显式指定appin模式

1.2 判断打开是否成功

可以用is_open()函数判断文件是否成功打开且尚未关闭:

fs.is_open();	//返回bool值

2. 读取内容

读取内容
逐词读取 >>
逐行读取 getline
逐字符读取 get

直接看示例吧:

// 前情提要(需要的变量)
istream ifs(s);
string s;
char c;
char tmp[1024];

第一种:

// 第一种:>>
string tmp;
while (ifs >> tmp)
{
    cout << tmp << endl;
}
// 这种方法会从ifs中逐个单词读取(也就是遇到空格、换行时会停止)

第二种:

// 第二种:getline()
while (getline(ifs, s))	//1024是单次读取的最大字符数量
{
    cout << s << endl;
}
// 可以和sstream结合使用

// 或者:
while (ifs.getline(tmp, 1024))	//注意上面的可以对string使用, 而这个是char*
{
    cout << tmp << endl;
}

第三种:

// 第三种:get()
while( (c = ifs.get())= EOF)
{
    cout << c;					//一个字符一个字符输出
}
// 不推荐,效率低

3. 关闭文件

f.close();
  • 15
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是在C语言中打开word文件读取文件内容的代码示例: ``` #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char fileName[] = "example.docx"; char buffer[100]; fp = fopen(fileName, "r"); if (fp == NULL) { printf("Error opening file %s!\n", fileName); exit(1); } while (fgets(buffer, 100, fp) != NULL) { printf("%s", buffer); } fclose(fp); return 0; } ``` 该代码使用了`fopen`函数来打开文件,并使用`fgets`函数读取文件中的内容,最后使用`fclose`关闭文件。请注意,在读取`.docx`格式的文件时,可能需要使用其他库或方法来解析其内容。 ### 回答2: 以下是用C语言编写的打开Word文件读取文件内容的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *filePointer; char wordFilePath[100]; char fileContent[1000]; printf("请输入Word文件路径:"); gets(wordFilePath); filePointer = fopen(wordFilePath, "r"); if (filePointer == NULL) { printf("无法打开文件!\n"); exit(1); } printf("文件内容:\n"); while(fgets(fileContent, sizeof(fileContent), filePointer) != NULL) { printf("%s", fileContent); } fclose(filePointer); return 0; } ``` 这段代码首先声明了所需的变量,包括文件指针`filePointer`用于指向打开的Word文件、`wordFilePath`用于储存用户输入的文件路径、`fileContent`用于储存文件内容。 然后通过`gets`函数获取用户输入的Word文件路径,并使用`fopen`函数以只读方式打开该文件。如果文件打开失败,程序会输出相应错误信息并退出。 接着使用`fgets`函数来逐行读取文件内容,并将每行内容打印出来。最后通过`fclose`函数关闭文件指针。 需要注意的是,这段代码假设Word文件是以纯文本格式保存,并且文件内容总字节数不超过1000。如果文件内容过长,需要相应地调整`fileContent`数组的大小。另外,代码没有对读取的内容进行任何处理,如果有特定的处理需求,可以在读取内容后进行相应的操作。 ### 回答3: 在C语言中,可以使用Windows API函数来打开和读取Word文件的内容。下面是一个示例代码: ```c #include <stdio.h> #include <windows.h> int main() { LPCSTR filename = "example.docx"; // Word文件的名称 HANDLE hFile = CreateFile(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("无法打开文件:%s\n", filename); return 1; } DWORD dwFileSize = GetFileSize(hFile, NULL); LPSTR lpFileContent = (LPSTR) malloc(dwFileSize + 1); if (lpFileContent == NULL) { printf("内存分配失败\n"); CloseHandle(hFile); return 1; } DWORD dwBytesRead; if (!ReadFile(hFile, lpFileContent, dwFileSize, &dwBytesRead, NULL)) { printf("读取文件内容失败\n"); free(lpFileContent); CloseHandle(hFile); return 1; } lpFileContent[dwFileSize] = '\0'; // 字符串结尾需要添加'\0' printf("文件内容:\n%s\n", lpFileContent); free(lpFileContent); CloseHandle(hFile); return 0; } ``` 这段代码通过CreateFile函数打开Word文件,并使用GetFileSize函数获取文件大小。然后使用malloc函数分配内存,使用ReadFile函数从文件读取内容,并将内容打印到控制台中。最后使用free函数释放内存,并使用CloseHandle函数关闭文件句柄。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值