其实也就想写出来。所以命名没有注意。,但是懒得改。很乱,将就着吧- -。表示其实你们可以边看边骂,我无所谓。
由于某CMS备份数据库的时候命名太过于挫。因此产生的备份文件可以通过穷举路径把它找出来。其实代码我都看不下去了。太特么乱了。但是博客好久没写了,哥其实是黔驴技穷了才拿它顶事。
首先先看下那个破CMS的备份代码把。
public function insertsql(){
//...省略一堆无关代码...
$random = mt_rand(1000, 9999);
//...省略一堆无关代码...
$filename = $file.date('Ymd').'_'.$random.'_'.$p.'.sql';
//...省略一堆无关代码...
}
看出问题了吗 - -。里面的变量$p是备份文件序号,而每次备份至少有一个文件。所以$p 等于1的情况是绝对每次都有的。所以要穷举出某天的备份 最多只要9999-1000次。于是产生了如下。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
edt1: TEdit;
btn1: TButton;
edt4: TEdit;
edt5: TEdit;
edt6: TEdit;
edt7: TEdit;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
arrMonth : array[0..11] of integer=(31,29,31,30,31,30,31,31,30,31,30,31);
implementation
{$R *.dfm}
function addEx(i:Integer):string;
begin
if i<10 then Result := '0'+inttostr(i)
else Result := inttostr(i);
end;
procedure TForm1.btn1Click(Sender: TObject);
var
fDateFile: TextFile;
i,j,x,iStart,iEnd,iStart2,iEnd2,iStart3,iEnd3: Integer; //20120705_3269_12.sql
sExWord,sExWord2,sNewWord: string;
begin
AssignFile(fDateFile,'c:\data370.dic');
Rewrite(fDateFile);
// iStart := StrToInt(edt2.Text);
// iEnd := StrToInt(edt3.Text);
iStart2 := StrToInt(edt4.Text);
iEnd2 := StrToInt(edt5.Text);
iStart3 := StrToInt(edt6.Text);
iEnd3 := StrToInt(edt7.Text);
for x:=iStart3 to iEnd3 do
begin
sExWord := edt1.Text; //这里是年份。
sExWord := '/' + sExWord + addEx(x); //不够10的补个0
iEnd := arrMonth[x-1];
for i:=1 to iEnd do
begin
sExWord2 := sExWord + addEx(i)+'_';
for j:=iStart2 to iEnd2 do
begin
sNewWord := sExWord2 + IntToStr(j)+'_1.sql';
Writeln(fDateFile,sNewWord);
end;
end;
end;
showmessage('ok');
CloseFile(fDateFile);
end;
end.
以上生成下面类似的字典
/20110701_1000_1.sql
/20110701_1001_1.sql
/20110701_1002_1.sql
...
/20110701_9999_1.sql
/20110702_1000_1.sql
/20110702_1001_1.sql
/20110702_1002_1.sql
...
/20110702_9999_1.sql