高手帮忙看一下那不合理
第一次运行没错
第二次运行内存某地址不能为writen以下是部分代码:void main(int argc,char* argv[])
{int i,j,k,l,length,nbackslash;
long int posn;
char buffer[400000],chrtmp1[100];
deque<string>::iterator is,je;
string tmpstr1,tmpstr2,tmpstr3,linkregex,lstfilei,lstfilej;
string dirend,rootdir,tmpstr4;
string::iterator itri,itrj;char tmpdir[256],tmp2[700];
ifstream infff;
ofstream outfff;
ostringstream ostring;
ostream_iterator<char> oi(ostring);
while(true)
{cout<<"input the root directory:"<<endl;
cin>>tmpdir;if(strcmp(tmpdir,"exit")==0)exit(0);
rootdir=tmpdir;
cout<<"input the file filter:"<<endl;
cin>>tmp2;if(strcmp(tmpdir,"exit")==0)exit(0);filefilter_regex.assign(tmp2);
cout<<"input the content filter:"<<endl;
cin>>tmp2;if(strcmp(tmpdir,"exit")==0)exit(0);filecttfilter_regex.assign(tmp2);
if(!regex_match(tmpdir,rootdir_regex))continue;
cout<<"start find all file:"<<endl;
dir2lst(tmpdir);
cout<<"start read all file:"<<endl;
for(i=0;i<lstfile.size();i++)
{ inf.clear();
if(regex_match(lstfile[i].c_str(),filefilter_regex))
{inf.open(lstfile[i].c_str(),ios::ate|ios::in);
length = infff.tellg();
inf.seekg(0,std::ios::beg);
inf.read(buffer,length);
lstfilectt.push_front(buffer);
inf.close();
fprintf(stdout,"Current %ld/%ld\r",i,lstfile.size());
fflush(stdout);
}else{lstfilectt.push_front("\0");}
}
cout<<endl;
cout<<"start relink all file:"<<endl;
for(i=0;i<lstfile.size();i++)
{
dirend=lstfile[i].substr(std::strlen(rootdir.c_str()));
remove(dirend.begin(),dirend.end(),'\\');
for(j=0;j<lstfilectt.size();j++)
{if(j==i)continue;
set_difference(lstfile[i].begin(),lstfile[i].end(),lstfile[j].begin(),lstfile[j].end(),tmpstr4.begin());
posn=lstfile[j].length()-tmpstr4.length();
posn=lstfile[j].rfind("/",posn);
lstfilej=lstfile[j].substr(posn);
lstfilei=lstfile[i].substr(posn);
nbackslash=count(lstfilej.begin(),lstfilej.end(),'\\');
itoa(nbackslash,chrtmp1,10);
lstfilei="}"+lstfilei;
lstfilei=chrtmp1+lstfilei;
lstfilei="href=\"(../){"+lstfilei;dirend="href=\""+dirend;
filecttfilter_regex=lstfilei;
regex_replace(oi,lstfilectt[j].begin(),lstfilectt[j].end(),filecttfilter_regex,dirend);
lstfilectt[j]=ostring.str();
fprintf(stdout,"Current %ld/%ld %ld/%ld\r",i,lstfile.size(),j,lstfilectt.size());
fflush(stdout);
}
lstfilenew.push_front(rootdir+dirend);
}
cout<<"start save all file"<<endl;
for(i=0;i<lstfile.size();i++)
{outfff.open(lstfilenew[i].c_str(),ios::out|ios::trunc);
outf.write(lstfilectt[i].c_str(),std::strlen(lstfilectt[i].c_str()));
outf.close();
fprintf(stdout,"Current %ld/%ld\r",i,lstfile.size());
fflush(stdout);
}
}
}
第一次运行没错
第二次运行内存某地址不能为writen以下是部分代码:void main(int argc,char* argv[])
{int i,j,k,l,length,nbackslash;
long int posn;
char buffer[400000],chrtmp1[100];
deque<string>::iterator is,je;
string tmpstr1,tmpstr2,tmpstr3,linkregex,lstfilei,lstfilej;
string dirend,rootdir,tmpstr4;
string::iterator itri,itrj;char tmpdir[256],tmp2[700];
ifstream infff;
ofstream outfff;
ostringstream ostring;
ostream_iterator<char> oi(ostring);
while(true)
{cout<<"input the root directory:"<<endl;
cin>>tmpdir;if(strcmp(tmpdir,"exit")==0)exit(0);
rootdir=tmpdir;
cout<<"input the file filter:"<<endl;
cin>>tmp2;if(strcmp(tmpdir,"exit")==0)exit(0);filefilter_regex.assign(tmp2);
cout<<"input the content filter:"<<endl;
cin>>tmp2;if(strcmp(tmpdir,"exit")==0)exit(0);filecttfilter_regex.assign(tmp2);
if(!regex_match(tmpdir,rootdir_regex))continue;
cout<<"start find all file:"<<endl;
dir2lst(tmpdir);
cout<<"start read all file:"<<endl;
for(i=0;i<lstfile.size();i++)
{ inf.clear();
if(regex_match(lstfile[i].c_str(),filefilter_regex))
{inf.open(lstfile[i].c_str(),ios::ate|ios::in);
length = infff.tellg();
inf.seekg(0,std::ios::beg);
inf.read(buffer,length);
lstfilectt.push_front(buffer);
inf.close();
fprintf(stdout,"Current %ld/%ld\r",i,lstfile.size());
fflush(stdout);
}else{lstfilectt.push_front("\0");}
}
cout<<endl;
cout<<"start relink all file:"<<endl;
for(i=0;i<lstfile.size();i++)
{
dirend=lstfile[i].substr(std::strlen(rootdir.c_str()));
remove(dirend.begin(),dirend.end(),'\\');
for(j=0;j<lstfilectt.size();j++)
{if(j==i)continue;
set_difference(lstfile[i].begin(),lstfile[i].end(),lstfile[j].begin(),lstfile[j].end(),tmpstr4.begin());
posn=lstfile[j].length()-tmpstr4.length();
posn=lstfile[j].rfind("/",posn);
lstfilej=lstfile[j].substr(posn);
lstfilei=lstfile[i].substr(posn);
nbackslash=count(lstfilej.begin(),lstfilej.end(),'\\');
itoa(nbackslash,chrtmp1,10);
lstfilei="}"+lstfilei;
lstfilei=chrtmp1+lstfilei;
lstfilei="href=\"(../){"+lstfilei;dirend="href=\""+dirend;
filecttfilter_regex=lstfilei;
regex_replace(oi,lstfilectt[j].begin(),lstfilectt[j].end(),filecttfilter_regex,dirend);
lstfilectt[j]=ostring.str();
fprintf(stdout,"Current %ld/%ld %ld/%ld\r",i,lstfile.size(),j,lstfilectt.size());
fflush(stdout);
}
lstfilenew.push_front(rootdir+dirend);
}
cout<<"start save all file"<<endl;
for(i=0;i<lstfile.size();i++)
{outfff.open(lstfilenew[i].c_str(),ios::out|ios::trunc);
outf.write(lstfilectt[i].c_str(),std::strlen(lstfilectt[i].c_str()));
outf.close();
fprintf(stdout,"Current %ld/%ld\r",i,lstfile.size());
fflush(stdout);
}
}
}
解决方案 »
- CArray::Add() 神奇的访问冲突问题
- 如何读取谷歌和火狐浏览器的书签?
- copyfile()的问题!
- 新鲜出炉!!! 2004上海程序员生存现状调查!!! 答者有分!!! (续帖8)
- 如果CSplitterWnd的父窗口不是CFrameWnd,会出现什么样的事情呢?先出100分,不够再加:)
- CEdit控件的文本对齐方式问题
- SQL语句中可以获得硬盘分区的大小吗?
- 请教一下--在基于单文档的应用程序中,CDlg类中调用CView类的成员变量
- 想了解一下木马得工作原理,写一个是最好的学习方法,但是有点问题,请指教!!
- ReadFile返回31,怎么回事?
- Slider控件中SetPos()参数置0后的滑块异常
- mfc 数组问题请教
真是还是我发现了问题原来是没有clear的原因