C语言如何读取文件中指定的某一段
展开全部
使用fread函数读取指定长度的字符串,即使包含\n也会被读取,可以首先使用fseek定位到文件结尾,然后ftell函数返回的值就是文件的大小,这样就可以用循环多次读取文件,直到读取所有内容
FILE *file = NULL;
char szFile[1025] = {0};
int nHadRead = 0;
file = fopen( "file.txt", "r+");
if ( file == NULL )
return;
fseek( file, 0, SEEK_END ); //定位到文件尾
int nLen = ftell( file ); //获取当前位置,即文件长度
fseek( file 0, SEEK_SET ); //重新定位到文件开头,准备开始读
while ( nHadRead < nLen )
{
int nRead = nLen - nHadRead >1024 ? 1024 : nLen - nHadRead; //如果剩余小于1024字节,则读剩余字节,否则每次读取1024字节。
int nTmp = fread( szFile, 1, nRead , file );
nHadRead += nTmp;
printf( "%s", szFile );
memset( szFile, 0x0, sizeof(szFile) );
}
fclose(file);
大致过程就是这样,纯手打,没有调试过,可能有错
FILE *file = NULL;
char szFile[1025] = {0};
int nHadRead = 0;
file = fopen( "file.txt", "r+");
if ( file == NULL )
return;
fseek( file, 0, SEEK_END ); //定位到文件尾
int nLen = ftell( file ); //获取当前位置,即文件长度
fseek( file 0, SEEK_SET ); //重新定位到文件开头,准备开始读
while ( nHadRead < nLen )
{
int nRead = nLen - nHadRead >1024 ? 1024 : nLen - nHadRead; //如果剩余小于1024字节,则读剩余字节,否则每次读取1024字节。
int nTmp = fread( szFile, 1, nRead , file );
nHadRead += nTmp;
printf( "%s", szFile );
memset( szFile, 0x0, sizeof(szFile) );
}
fclose(file);
大致过程就是这样,纯手打,没有调试过,可能有错
追问
全部文件读出来可以 我现在要读取文件中指定的一段
展开全部
只单纯读文件某一段,首先要知道这段内容开头的位置并定位文件指针,还要知道内容长度,这个除非你读取前就知道,否则不如直接读取全文或者一段一段读取,然后用遍历字符串判断的方法把你题目中说的B开头ENDB结尾的内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
#include<string.h>
#define TBEGIN "B"
#define TEND "END B"
void main() { FILE *fp; char buffer[256];
if ( fp=fopen("c:\\test.txt","r") ) {
while ( !feof(fp) ) { fgets(buffer,255,fp); if ( strcmp(buffer,TBEGIN)==0 ) break; }
while ( !feof(fp) ) {
fgets(buffer,255,fp); if ( strcmp(buffer,TEND)==0 ) break; else printf("%s\n",buffer);
}
fclose(fp);
} else printf("无法打开文本文件.\n");
}
更多追问追答
追问
while ( !feof(pFile) )
{
fgets(buffer,255,pFile);
if ( strcmp(buffer,TBEGIN)==0 )
break;
}
老哥 你的程序一直运行到这 没东西进tbegin啊
追答
你文本文档是否有大写字母B单独一行的内容作为目标内容开始? 程序一直在找这个开始标志行未得
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
//从文件p中接收第n行字串,保存在str中
//假设一行的文本内容不超过1000字符,如果估计超过,请自行修改函数中的1000
//如果打不开文件,返回NULL
//如果文件不足n行,返回NULL
//如果正获得正常数据,返回str的地址
char *getfileline(char *p,int n, char *str){
FILE *fp;
int i;
if ((fp=fopen(p,"r"))==NULL){
printf("打开文件错误\n");
return NULL;
}
for(i=1;i<n;i++)
if ((fgets(str,1000,fp))==NULL) {
fclose(fp);
return NULL;
}
fgets(str,1000,fp);
fclose(fp);
return str;
}
int main(){
char p[1000];
getfileline("d:\\temp.txt", 10, p);
puts(p);
}
//从文件p中接收第n行字串,保存在str中
//假设一行的文本内容不超过1000字符,如果估计超过,请自行修改函数中的1000
//如果打不开文件,返回NULL
//如果文件不足n行,返回NULL
//如果正获得正常数据,返回str的地址
char *getfileline(char *p,int n, char *str){
FILE *fp;
int i;
if ((fp=fopen(p,"r"))==NULL){
printf("打开文件错误\n");
return NULL;
}
for(i=1;i<n;i++)
if ((fgets(str,1000,fp))==NULL) {
fclose(fp);
return NULL;
}
fgets(str,1000,fp);
fclose(fp);
return str;
}
int main(){
char p[1000];
getfileline("d:\\temp.txt", 10, p);
puts(p);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以使用条件调用指令,使用某个条件直接调用所需要的文件段就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询