#include<string>
#include<stdio.h>
using std::cin
using std::cout
using std::string
using std::endl
using std::getline
int main(){
string name // 文件路径和猜御文件名
FILE *stream //文件指针
char buf[126]
cout<<"please input the filename:"<<endl
getline(cin,name,'\n') //输入D:\\file.txt,\\转义为\,转义后的路径就是D:\file.txt
const char *p=name.data()
stream=fopen(p,"r") /手兆租/打开file.txt(fopen中填“name”行不行?),不能填name,这就最好加入容错处理
fgets(buf,126,stream)//把毕兆file.txt中的内容保存到数组buf中
for(int i=0i<=126i++)
cout<<buf[i] //输出文件内容
_fcloseall()
}
希望能帮到你
#include <stdio.h>#include <stdlib.h>
#include <string.h>戚乎
#define BUF_SIZE 1024
#define KEY "AB2345"
#define KEY_LEN 7
int main()
{
int ch = 0
int first = 1//开始时的标志,因为是一个字符一个字符的扫描
int flag = 0//文件开辩码头是不是所要读内容的标志
int count = 0//遇到'\n'的个数
int pre_pos = 0, cur_pos = 0//前一次和当前文件指针的位置
char buf[BUF_SIZE] = {0}
FILE *fp = NULL
fp = fopen("test.txt", "r")
if (fp == NULL)
{
printf("Cann't open the file!\n")
exit(1)
}
else
{
while ((ch = fgetc(fp)) != EOF)
{
if (first)
{
//若要读取的内容在文件开头就有时
//移动指针到文件开头
fseek(fp, -1L, SEEK_CUR)
fgets(buf, KEY_LEN, fp)
if (strcmp(buf, KEY) == 0)
{
first = 0
flag = 1
continue
}
else
{
first = 0
}
}
if (ch == '\n')
{
count++//遇到'\n'的个数
pre_pos = cur_pos//上次遇到'\n'时文件指针的位置
cur_pos = ftell(fp)//当前遇到'\n'时文件指针高灶悉的位置
//文件开头内容符合要求的就适当移动指针位置
//然后读取输出来
if (count == 1 &&flag == 1)
{
fseek(fp, 0L, SEEK_SET)
memset(buf, 0, sizeof(buf))
fgets(buf, cur_pos - 1, fp)
printf("%s\n", buf)
}
//之后内容符合要求的就适当移动指针位置
//然后读取输出来
else
{
memset(buf, 0, sizeof(buf))
fgets(buf, KEY_LEN, fp)
if (strcmp(buf, KEY) == 0)
{
fseek(fp, (-1) * (KEY_LEN - 1), SEEK_CUR)
memset(buf, 0, sizeof(buf))
fgets(buf, cur_pos-1-pre_pos, fp)
printf("%s\n", buf)
}
}
}
}
}
fclose(fp)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)