int readfile();
void change_specify_row(int lineNumber);
void change_specify_row2(int lineNumber);
void change_specify_row3(int lineNumber);
int main(){
// readfile();
// writefile("pool 114.118.7.163 iburst");
// readfile_fread();
// get_file_length();
// test_split();
// change_specify_row(3);
// change_specify_row2(3);
change_specify_row3(3);
return 0;
}
//read file content to str
int readfile(){
int ret = -1;
char ip[255];
FILE *fp;
fp = fopen("myfile1.txt","r");
if(fp == NULL){
printf("can not open file");
ret = -1;
return ret;
}
if(fgets(ip,255,fp)!=NULL){
printf("aaa:%s\n",ip);
}{
printf("Error: Unable to read the file.\n");
}
fclose(fp);
ret = 0;
return ret;
}
int writefile(char *content){
int ret = -1;
FILE *fp = NULL;
fp = fopen("myfile1.txt","w");
if(fp==NULL){
printf("can not open write file");
return -1;
}
printf("content:%s\n",content);
printf("content length=%d\n",sizeof(content));
// use fwrite() write info
ret = fwrite(content,1,strlen(content),fp);
printf("fwrite ret = %d\n",ret);
ret = fprintf(fp,content);
printf("fprintf2 ret = %d\n",ret);
ret = fclose(fp);
printf("fclose ret = %d\n",fp);
return ret;
}
int readfile_fread(){
int ret = -1;
FILE *fp = NULL;
char mycontent[255];
fp = fopen("myfile1.txt","r");
if(fp==NULL){
printf("can not open file");
return -1;
}
ret = fread(mycontent,1,255,fp);
printf("fread ret = %d\n",ret);
printf("mycontent:%s\n",mycontent);
printf("mycontent-length=%d\n",strlen(mycontent));
mycontent[ret] = '\0';
fclose(fp);
return 0;
}
int get_file_length(){
int ret = -1;
FILE *fp = NULL;
fp = fopen("myfile1.txt","r");
if(fp == NULL){
printf("can not open file");
return -1;
}
ret = fseek(fp,0,SEEK_END);
printf("fseek ret=%d\n",ret);
// ret = ftell(fp);
long length2 = ftell(fp);
printf("ftell ret =%d\n",length2);
fseek(fp, 0, SEEK_END);
long length = ftell(fp);
printf("length = %ld\n",length);
fclose(fp);
return ret;
}
char **split(char *str, const char *delim, int *num) {
char **result = NULL;
char *token = NULL;
int count = 0;
token = strtok(str, delim);
while (token != NULL) {
result = (char **)realloc(result, (count + 1) * sizeof(char *));
result[count] = token;
count++;
token = strtok(NULL, delim);
}
*num = count;
return result;
}
void test_split(){
char str[] = "Hello,World,china,american!";
int num;
char **split_str = split(str, ",", &num);
for (int i = 0; i < num; i++) {
printf("%s\n", split_str[i]);
}
free(split_str);
}
void change_specify_row(int lineNumber){
int ret = -1;
FILE *fp = NULL;
char line_info[256] ;
char *char_info = "hahahaha";
fp = fopen("myfile1.txt","r+");
if(fp == NULL){
printf("can not open file");
return ret;
}
for(int i=0;i<lineNumber-1;i++){
fgets(line_info,256,fp);
printf("line_row:%d line info=%s\n",i,line_info);
}
fgets(line_info,256,fp);
// fseek(fp,0,SEEK_SET);
fwrite(char_info,1,strlen(char_info),fp);
// fwrite(char_info,1,256,fp); //这行不行,会出现,无法打开文件情况,上一行可以
fclose(fp);
ret = 0;
return ret;
}
void change_specify_row2(int lineNumber){
FILE *file;
char filename[256] ="myfile1.txt";
char line[256];
char *linechange= "bbbbbbbbbbbbbbb";
printf("请输入要修改的文件名: ");
// scanf("%s", filename);
file = fopen(filename, "r+");
if (file == NULL) {
printf("无法打开文件!\n");
exit(1);
}
printf("请输入要修改的行号: ");
// 跳过指定行号之前的所有行
for (int i = 0; i < lineNumber - 1; i++) {
fgets(line, 256, file);
}
// 读取要修改的行
fgets(line, 256, file);
// 修改数据
printf("请输入要修改的数据: ");
// scanf("%s", line);
// 删除行尾的换行符
// linechange[strlen(linechange) - 1] = '\0';
// linechange[strlen(linechange)] = '\0';
// 跳到行首,然后写入修改后的数据
// fseek(file, 0, SEEK_SET);
fwrite(linechange, strlen(linechange), 1, file);
// 添加行尾的换行符
fwrite("\n", 1, 1, file);
// 关闭文件
fclose(file);
printf("修改成功!\n");
return 0;
}
void change_specify_row3(int lineNumber){
int ret = -1;
FILE *fp = NULL;
char line_info[256] ;
char *char_info = "hahahaha";
fp = fopen("myfile1.txt","r+");
if(fp == NULL){
printf("can not open file");
return ret;
}
for(int i=0;i<lineNumber-1;i++){
fgets(line_info,256,fp);
printf("line_row:%d line info=%s\n",i,line_info);
}
fgets(line_info,256,fp); 获取第3行数据
printf("lineNumber:%d content:%s\n",lineNumber,line_info);
int charlength = strlen(line_info); //获取第3行数据长度
int seeklength = ftell(fp); //获取读完第三行数据的指针位置(length)
printf("charlength:%d seeklength:%d\n",charlength,seeklength);
// fseek(fp,0,SEEK_SET);
fseek(fp,seeklength-charlength,SEEK_SET);//把指针设置到第三行开头
for(int i=0;i<charlength-1;i++){ //把第三行的数据都替换成" "
fwrite(" ",1,1,fp);
// fwrite("",1,0,fp);
}
fseek(fp,seeklength-charlength,SEEK_SET); //把指针设置到第三行开头
fwrite(char_info,1,strlen(char_info),fp); //写入数据到第三行
//为什么这样做,因为如果直接把数据写到第三行,如果原来第三行的数据长度大于这次写的,则不能完全替换;
//本来想着删除第3行,但是网上的删除,都是把后面的数据从第3行开始重新写,如果后面有10000行,则好像不好
//我这样有个问题,就是第三行后有很多空格,原因是先把第三行数据用空格替换,然后再写的数据
// fwrite(char_info,1,256,fp); //这行不行,会出现,无法打开文件情况,上一行可以
fclose(fp);
ret = 0;
return ret;
}