文本读取并且插入删除行 想通过编写一个win32应用程序实现从文本里读取数据,数据是按行的,我想实现查找,插入删除行这几个功能求高手赐教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 fopen fgetc fclose fseek fwrite 等等下面是一个遍历文本文件每行的例子int _tmain(int argc, TCHAR *argv[]){ CIsBinaryFile isb; string strPath = "F:\\vs2005\\isBinFile\\二进制文件搜索工具\\BinaryFiles.txt"; FILE *file = NULL; string strLine = ""; while(isb.ReadFileLine(strPath, strLine, &file, "r")) { int i = 0; } return 0;}BOOL CIsBinaryFile::ReadFileLine(string strFilePath, string &strLine, FILE **stream, string strMode){ char buf[MAX_PATH]; memset(buf, 0, MAX_PATH); int i, ch; errno_t err; if(*stream == NULL) { if( (err = fopen_s(stream, strFilePath.c_str(), strMode.c_str())) != 0 ) { printf("Open or Create %s is Error\n", strFilePath); return TRUE; } } ch = fgetc( *stream ); for( i=0; (i < MAX_PATH ) && ( feof( *stream ) == 0 ); i++ ) { buf[i] = (char)ch; if(buf[i] == '\n') { buf[i + 1] = '\0'; strLine += buf; return TRUE; } ch = fgetc( *stream ); } fclose(*stream); return FALSE;} 我自己写的可以读取的,就是不知道怎样插入一行数据,还有删除#include <iostream>#include <fstream>using namespace std;void main(){char m;char buffer[256];fstream out;out.open("2.txt",ios::in);cout<<"2.txt"<<" 的内容如下:"<<endl;while(!out.eof()){ out.getline(buffer,256,'\n');//getline(char *,int,char) 表示该行字符达到256个或遇到换行就结束 cout<<buffer<<endl;}out.close();cin.get();//cin.get() 是用来读取回车键的,如果没这一行,输出的结果一闪就消失了} 文件不大的话一次性将文件内容存入buffer中,然后在buffer中操作,修改完成以后写会文件中。文件比较大的话可以考虑使用文件内存映射 插入:先用fseek或fsetpos找到需要存储的位置,再输出行删除的话没想到什么好方法,笨一点的方法是全部读入,在内存里删除一行再输出 没有涉及数据库,只是一个很简单的win32小程序,不要插入好多行,只要能插入,我想先实现功能,然后才能深入 请教大神ListControl问题 学VC++的进 ntddk如何安装? 回复太快!如果你是恶意刷楼,将会受到严厉惩罚!???? vs2005工程设置问题? 请教高手: VC的class wizard里面的control id 是如何从那个文件里面读取的? 如何通过编程改动IIS的FTP服务的主目录!! 有谁知道这样的转换? 请问在VB中可以控制WINDOWS 自动开关机吗?如果可以,怎样控制? 菜鸟问题:vc中头文件读取的顺序是什么呢? 如何控制API GetCursorPos 的结果,给点思路就行 谁认识苏华平吗?
下面是一个遍历文本文件每行的例子int _tmain(int argc, TCHAR *argv[])
{
CIsBinaryFile isb;
string strPath = "F:\\vs2005\\isBinFile\\二进制文件搜索工具\\BinaryFiles.txt";
FILE *file = NULL;
string strLine = "";
while(isb.ReadFileLine(strPath, strLine, &file, "r"))
{
int i = 0;
}
return 0;
}
BOOL CIsBinaryFile::ReadFileLine(string strFilePath, string &strLine, FILE **stream, string strMode)
{
char buf[MAX_PATH];
memset(buf, 0, MAX_PATH);
int i, ch;
errno_t err;
if(*stream == NULL)
{
if( (err = fopen_s(stream, strFilePath.c_str(), strMode.c_str())) != 0 )
{
printf("Open or Create %s is Error\n", strFilePath);
return TRUE;
}
}
ch = fgetc( *stream );
for( i=0; (i < MAX_PATH ) && ( feof( *stream ) == 0 ); i++ )
{
buf[i] = (char)ch;
if(buf[i] == '\n')
{
buf[i + 1] = '\0';
strLine += buf;
return TRUE;
}
ch = fgetc( *stream );
}
fclose(*stream);
return FALSE;
}
#include <iostream>
#include <fstream>
using namespace std;void main()
{
char m;
char buffer[256];
fstream out;
out.open("2.txt",ios::in);
cout<<"2.txt"<<" 的内容如下:"<<endl;
while(!out.eof())
{
out.getline(buffer,256,'\n');//getline(char *,int,char) 表示该行字符达到256个或遇到换行就结束
cout<<buffer<<endl;
}
out.close();
cin.get();//cin.get() 是用来读取回车键的,如果没这一行,输出的结果一闪就消失了
}
先用fseek或fsetpos找到需要存储的位置,再输出行删除的话没想到什么好方法,
笨一点的方法是全部读入,在内存里删除一行再输出