运用FILE对文本文件进行指定读取、删除,指定位置添加一行操作类
来源:互联网 发布:刘一龙 知乎 编辑:程序博客网 时间:2024/05/02 00:38
1、文件操作类定义
#ifndef FILEOPERATION_H
#define FILEOPERATION_H
#include <stdio.h>
#include <string>
using namespace std;
class FileOperation
{
public:
FileOperation();
FileOperation(char*);
~FileOperation();
bool Open(char*);
char* ReadLine(int index = 1);
bool WriteLine(char* , int index = 1);
bool RemoveLine(int index = 1);
void Close();
private:
FILE* m_file;
string m_fname;
};
#endif
2、文件操作类实现
#include "FileOperation.h"
FileOperation::FileOperation() : m_file(NULL)
{
}
FileOperation::FileOperation(char* name) : m_fname(name), m_file(NULL)
{
}
FileOperation::~FileOperation()
{
if(m_file != NULL)
{
fclose(m_file);
m_file = NULL;
}
}
bool FileOperation::Open(char* name)
{
if(m_file != NULL)
{
delete m_file;
m_file = NULL;
}
m_file = fopen(name,"r");
if(m_file == NULL)
{
return false;
}
m_fname = name;
return true;
}
void FileOperation::Close()
{
if(m_file != NULL)
{
fclose(m_file);
m_file = NULL;
}
}
char* FileOperation::ReadLine(int index)
{
if(m_file == NULL)
{
m_file = fopen(m_fname.c_str(),"r");
if(m_file == NULL)
{
return NULL;
}
}
else
{
fseek(m_file,0,SEEK_SET);
}
char stmp[1024];
char* sres = NULL;
int icount = 0;
while(!feof(m_file))
{
sres = fgets(stmp,1024,m_file);
icount++;
if(icount == index)
{
break;
}
}
return sres;
}
bool FileOperation::WriteLine(char* str, int index)
{
if(m_file == NULL)
{
m_file = fopen(m_fname.c_str(),"r");
if(m_file == NULL)
{
return NULL;
}
}
else
{
fseek(m_file,0,SEEK_SET);
}
FILE* ftmp;
ftmp = fopen("tmp.tmp","w+t");
if(ftmp == NULL)
{
return false;
}
char stmp[1024];
char* sres = NULL;
int icount = 0;
int inum = 0;
while(!feof(m_file))
{
sres = fgets(stmp,1024,m_file);
int ilen = 0;
icount++;
if(icount == index)
{
ilen = strlen(str);
inum = fwrite(str,sizeof(char),ilen,ftmp);
if(inum != ilen)
{
printf("insert string error!");
break;
}
inum = fwrite("/n",1,1,ftmp);
if(inum != 1)
{
printf("insert string error!");
break;
}
}
if(sres != NULL)
{
ilen = strlen(sres);
inum = fwrite(sres,sizeof(char),ilen,ftmp);
if(inum != ilen)
{
printf("write string error!");
break;
}
}
}
fclose(m_file);
fseek(ftmp,0,SEEK_SET);
m_file = fopen(m_fname.c_str(),"w+t");
if(m_file == NULL)
{
return false;
}
while(!feof(ftmp))
{
sres = fgets(stmp,1024,ftmp);
if(sres != NULL)
{
int ilen = strlen(sres);
inum = fwrite(sres,sizeof(char),ilen,m_file);
if(inum != ilen)
{
printf("write string error!");
break;
}
}
}
fclose(ftmp);
fclose(m_file);
remove("tmp.tmp");
m_file = fopen(m_fname.c_str(),"r");
return true;
}
bool FileOperation::RemoveLine(int index)
{
if(m_file == NULL)
{
m_file = fopen(m_fname.c_str(),"r");
if(m_file == NULL)
{
return NULL;
}
}
else
{
fseek(m_file,0,SEEK_SET);
}
FILE* ftmp;
ftmp = fopen("tmp.tmp","w+t");
if(ftmp == NULL)
{
return false;
}
char stmp[1024];
char* sres = NULL;
int icount = 0;
int inum = 0;
while(!feof(m_file))
{
sres = fgets(stmp,1024,m_file);
int ilen = 0;
icount++;
if(icount == index)
{
continue;
}
if(sres != NULL)
{
ilen = strlen(sres);
inum = fwrite(sres,sizeof(char),ilen,ftmp);
if(inum != ilen)
{
printf("write string error!");
break;
}
}
}
fclose(m_file);
fseek(ftmp,0,SEEK_SET);
m_file = fopen(m_fname.c_str(),"w+t");
if(m_file == NULL)
{
return false;
}
while(!feof(ftmp))
{
sres = fgets(stmp,1024,ftmp);
if(sres != NULL)
{
int ilen = strlen(sres);
inum = fwrite(sres,sizeof(char),ilen,m_file);
if(inum != ilen)
{
printf("write string error!");
break;
}
}
}
fclose(ftmp);
fclose(m_file);
remove("tmp.tmp");
m_file = fopen(m_fname.c_str(),"r");
return true;
}
3、客户使用类
#include <iostream>
#include "FileOperation.h"
int main()
{
FileOperation fp;
if(!fp.Open("E:/myproject/fileoperation/file/test.txt"))
{
return -1;
}
cout << fp.ReadLine() << endl;
cout << fp.ReadLine(2) << endl;
cout << fp.ReadLine(5) << endl;
cout << fp.ReadLine(10) << endl;
char*res = fp.ReadLine(13);
if( res != NULL)
cout << res << endl;
fp.WriteLine("aaaaaa", 1);
fp.WriteLine("bbbbbbbb", 3);
fp.WriteLine("cccccccccc", 8);
fp.WriteLine("ddddddddddd",17);
fp.RemoveLine();
fp.RemoveLine(2);
fp.RemoveLine(3);
fp.RemoveLine(28);
fp.Close();
return 0;
}
- 运用FILE对文本文件进行指定读取、删除,指定位置添加一行操作类
- 运用fstream对文本文件进行指定读取、删除,指定位置添加一行操作类
- sed对文件指定位置添加或者删除一行
- js指定tr添加一行,删除一行
- js 对表格的动态操作(动态添加行,删除该行,在指定位置添加控件)
- js 对表格的动态操作(动态添加行,删除该行,在指定位置添加控件)
- 使用memmove对数组中的指定内容进行删除操作
- 动态添加一行文本框,指定删除一行,取值
- 对数组进行指定位置的翻转
- 删除指定位置字符
- C读写文件--逐行输出、删除指定的一行,指定位置插入
- JS 字符串操作函数 往指定位置插入字符 删除指定位置字符 替换指定位置字符
- JS 字符串操作函数 往指定位置插入字符 删除指定位置字符 替换指定位置字符
- JS 字符串操作函数 往指定位置插入字符 删除指定位置字符 替换指定位置字符
- 为指定文本文件的的每一行的结尾添加指定字符串并写入新文件中
- mysql使用sql指定位置添加字段、删除字段
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
- 创建最大堆,对指定位置元素进行删减
- 关于分组后字段拼接的问题 (Oracle)
- 关于日本人的笑话
- 基于VMware的linux虚拟机硬盘空间扩大
- QT中TCP/UDP通信数据的组织
- Windows下globus tookit(gt4)的安装与配置
- 运用FILE对文本文件进行指定读取、删除,指定位置添加一行操作类
- IT人应接受的好习惯和应拒绝的不良习惯总结
- 我们要挑战程序员35岁分界线
- QT读写Sqlite数据库
- 网络日志(2010.5.11)
- XEIM 配置程序源代码
- Jdom解析xml问题
- 程序员须知:怎么提高自己的编程水平?
- C# 获取文件的数字签名信息