📄 filefunction.h
字号:
else
{ break; }
}
else
{
cout << "输入错误\n " << endl;
break;
}
}
else
{
cout << "输入记录号错误! " << endl;
break;
}
}
case 2://删除当前读指针记录
{
getread();
cout << "删除当前读指针文件 \n";
char ch='n';
cout << "确认删除? (Y/N) \n" ;
cin >> ch;
if( ch =='Y' || ch =='y' || ch =='N' || ch =='n')
{
if( ch =='Y' || ch =='y')
{
if( (*currentread).deletetag==false )
{
ofstream deletingFile;
_unlink((*currentread).fname); // 删除这个文件
(*currentread).deletetag = true;
(*currentread).blocklength = 0;
delete [](*currentread).fname;
delete [](*currentread).recordtag;
(*currentread).fname = new char[255];
strcpy( (*currentread).fname, "C:\\RECYCLED" );
(*currentread).recordtag = new char[500];
strcpy( (*currentread).recordtag, "no record");
cout << "删除成功!" << endl;
break;
}
else
{
cout << "该记录之前已被删除\n";
break;
}
}
else
{ break;}
}
else
{
cout << "输入错误! " << endl;
break;
}
}
case 3://删除当前写指针记录
{
getwrite();
cout << "删除当前写指针文件 \n";
char ch='n';
cout << "确认删除? (Y/N) \n" ;
cin >> ch;
if( ch =='Y' || ch =='y' || ch =='N' || ch =='n')
{
if( ch =='Y' || ch =='y')
{
if( (*currentwrite).deletetag==false )
{
ofstream deletingFile;
_unlink((*currentwrite).fname); // 删除这个文件
(*currentwrite).deletetag = true;
(*currentwrite).blocklength = 0;
delete [](*currentwrite).fname;
delete [](*currentwrite).recordtag;
(*currentwrite).fname = new char[255];
strcpy( (*currentwrite).fname, "C:\\RECYCLED" );
(*currentwrite).recordtag = new char[500];
strcpy((*currentwrite).recordtag, "no record");
cout << "删除成功!" << endl;
break;
}
else
{
cout << "该记录之前已被删除\n";
break;
}
}
else
{ break; }
}
else
{
cout << "输入错误! " << endl;
break;
}
}
case 4://查找所有合适的标志并删除
{
cout << "按标识删除记录" << endl;
char *arr=new char[500];
cout << "请输入标识(也可是其中一段)" << endl;
cin >> arr;
int a=0;
int R[500];
list<record>::iterator findtemp = Listlink.begin();
for( int i=1; i<=dnum || findtemp!=Listlink.end() ; findtemp++,i++)
{
string Data1="";
Data1+=(*findtemp).recordtag;
if( (Data1.find(arr))!=-1)
{
cout << "与你输入条件匹配的有第" << i << "个记录" << endl;
R[a]=i;
a++;
}
}
if(a==0) //记录不存在
{
cout << "不存在与您输入条件匹配的记录\n";
}
if(a==1) //记录只有一个符合查找条件
{
char ch='n';
cout << "确认删除? (Y/N) \n" ;
cin >> ch;
if( ch =='Y' || ch =='y' || ch =='N' || ch =='n')
{
if( ch =='Y' || ch =='y')
{
list<record>::iterator deltemp;
deltemp = Listlink.begin();
for( int j=1; j<R[0];j++)
{
deltemp++;
}
if( (*deltemp).deletetag==false )
{
ofstream deletingFile;
_unlink((*deltemp).fname); // 删除这个文件
(*deltemp).deletetag = true;
(*deltemp).blocklength = 0;
delete [](*deltemp).fname;
delete [](*deltemp).recordtag;
(*deltemp).fname = new char[255];
strcpy( (*deltemp).fname, "C:\\RECYCLED");
(*deltemp).recordtag = new char[500];
strcpy( (*deltemp).recordtag, "no record");
cout << "删除成功!" << endl;
break;
}
else
{
cout << "该记录之前已被删除\n";
break;
}
}
else
{ break; }
}
else
{
cout << "输入错误\n ";
break;
}
}
if(a>1) //符合条件的不止一个
{
int k;
do
{
cout << "请选择\n" ;
cout << "1------浏览记录" << endl;
cout << "2------打开文件链接" << endl;
cout << "3------删除记录" << endl;
cout << "0------退出" << endl;
cin >> k;
switch(k)
{
case 0:break;
case 1: //删除前刻先浏览
{
int num;
int u;
do
{
cout << "请输入记录号" << endl;
cin >> num;
filebrowse(num);
cout << "继续浏览?是请选1,否请选0" << endl;
cin >> u;
cout << endl;
}
while(u!=0);
break;
}
case 2: //删除前刻先链接打开
{
int num;
int u;
do
{
cout << "请输入记录号" << endl;
cin >> num;
filelink( num );
cout << "继续链接?是请选1,否请选0" << endl;
cin >> u;
cout << endl;
}
while(u!=0);
break;
}
case 3:
{
int num;
int u;
do
{
cout << "请输入记录号" << endl;
cin >> num;
if( num<=dnum )
{
char ch='n';
cout << "确认删除? (Y/N) \n" ;
cin >> ch;
if( ch =='Y' || ch =='y' || ch =='N' || ch =='n')
{
if( ch =='Y' || ch =='y')
{
cout << "删除第" << num << "个记录的文件 \n";
list<record>::iterator deltemp;
deltemp = Listlink.begin();
for( int i=1; i<num; i++)
{
deltemp++;
}
if( (*deltemp).deletetag==false )
{
ofstream deletingFile;
_unlink((*deltemp).fname); // 删除这个文件
(*deltemp).deletetag = true;
(*deltemp).blocklength = 0;
delete [](*deltemp).fname;
delete [](*deltemp).recordtag;
(*deltemp).fname = new char[255];
strcpy( (*deltemp).fname, "C:\\RECYCLED");
(*deltemp).recordtag = new char[500];
strcpy( (*deltemp).recordtag , "no record");
cout << "删除成功!" << endl;
}
else
{
cout << "该记录之前已被删除\n";
}
}
else
{ break; }
}
else
{
cout << "输入错误\n";
break;
}
cout << "继续删除?是请选1,否请选0" << endl;
cin >> u;
cout << endl;
}
else
{ cout << "输入错误\n"; break; }
}
while(u!=0);
break;
}
default:break;
}
}
while(k!=0);
}
}
default:break;
}
}
while(z!=0);
}
void function::filelink(int b)
//链接文件,若操作系统内存在打开的软件,则可通过该软件实现打开
{
cout << "开始链接第" << b << "个记录\n";
list<record>::iterator linktemp;
linktemp = Listlink.begin();
for( int i=1; i<b; i++)
{
linktemp++;
}
if( (*linktemp).deletetag==false )
{
ifstream FILE;
FILE.open( (*linktemp).fname, ios::in | ios::binary);
if( !FILE.fail() )
{
system((*linktemp).fname);
FILE.close();
}
else
{
cout << "文件不存在!" << endl;
FILE.close();
return;
}
}
else
{
cout << "该记录已被删除\n";
return;
}
}
void function::sequentialread() //顺序读
{
if( currentread != Listlink.end() )
{
if( (*currentread).deletetag==false )
{
ifstream inf;
inf.open( (*currentread).fname , ios::in | ios::binary);
int i;
cout << "\n 请选择读取的方式:\n" ;
cout << "1------在屏幕上显示( 建议仅文本文件选择 )\n"; //直接读出
cout << "2------通过链接打开( 适用于非文本文件与文本文件)\n";//链接打开
cin >> i;
switch(i)
{
case 1:
{
(*currentread).data="";
char *arr = new char[6];
do //输出所有记录
{
memset(arr,0,6);
inf.read(arr,5);
(*currentread).data+=arr;
}
while( !inf.eof() ); //遇到EOF标志停止循环
cout << "\n记录内容:\n";
cout << setw(100) << setiosflags(ios::left) << (*currentread).data << endl;
cout << "记录标志是:\n";
cout << setw(100) << setiosflags(ios::left) << (*currentread).recordtag << endl;
if( (*currentread).data_num!=dnum )
{
currentread++;
} //调用一次顺序读,当前记录读指针后移一位
inf.close();
break;
}
case 2:
{
system( (*currentread).fname );
if( (*currentread).data_num!=dnum )
{
currentread++;
}
break;
}
default:
{
cout << "输入错误\n";
break;
}
}
}
else
{
cout << "该记录已被删除\n" ;
if( (*currentread).data_num!=dnum )
{
currentread++;
}
}
}
if( (*currentread).data_num == dnum )
{
cout << "记录已全部读取完毕" << endl;
}
}
void function::sequentialwrite() //顺序写
{
if( dnum!=0 )
{
list<record>::iterator deltemp=currentwrite;
deltemp++;
if( deltemp != Listlink.end() )
{
Listlink.erase( deltemp );
deltemp++;
}
}
temp.data_num=dnum+1;
cout << "\n请输入记录标志:\n";
cin >>temp.recordtag;
cout << "\n顺序写入文件…… \n";
ofstream ouf;
ouf.open( temp.fname , ios::out | ios::binary);
cin.clear();
cout << "请输入内容: \n";
cin.get();
ouf << cin.rdbuf();
ouf.seekp(0,ios::end);
long pos=ouf.tellp();
ouf.seekp(0,ios::beg);
pos-= ouf.tellp();
temp.blocklength = pos; //求文件长度
ouf.close();
Listlink.push_back(temp);
dnum++;
currentwrite++;
cout << "建立第" << (*currentwrite).data_num << "个记录" << endl;
if(dnum==1)
{
currentread++;
}
temp.data_num = 0;
temp.fname = new char[255];
temp.recordtag = new char[500];
strcpy( temp.recordtag, "no record");
temp.deletetag = false;
temp.blocklength = 0;
}
void function::fileopen()
//打开函数,从外存将全部内容写入缓存区。
{
int i=1;
int read, write;
char *file1=new char[10];
char *buffer4 = new char[20];
char *buffer5 = new char[20];
strcpy(file1, ".txt"); // file1=".txt"
while(1)
{
char *file=new char[30];
char *buffer = new char[20];
strcpy(file, "c:\\data"); // file="c:\\data"
_itoa( i, buffer, 10 );
//Convert an integer to a string
//buffer=1 这里1是一个char
strcat( file, buffer); //连接file和buffer, file="c:\\data1"
strcat( file, file1 ); //链接file和file1, file="c:\\data1.txt"
ifstream fin;
fin.open( file, ios::in | ios::binary);
if( !fin.fail() )
{
record temp1 ;
char *buffer1 = new char[20];
char *buffer2 = new char[20];
char *buffer3 = new char[20];
char s[100];
fin.getline( s, 100);
fin.getline( buffer1,20 ); //读出记录号存入buffer1
temp1.data_num = atoi( buffer1 );
//通过atoi(char *)buffer1转为int
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -