如何使用bcb制作在线升级程序

netAntNT 2005-07-18 02:21:42
请给出一个正确的思路。。
最好提供示例源代码
...全文
287 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
netAntNT 2005-08-01
  • 打赏
  • 举报
回复
特别感谢smartrosesun(seast)给出了实际例子
尽管我知道实现的基本原理,但我同样也要感谢 linuxghs() 就他一句:回到家里给你写. 我就给分他
linuxghs 2005-07-30
  • 打赏
  • 举报
回复
我是这样实现的:
用的http里的一个控件,让他去读取网上的一个ini文件,这个文件里包括了你要升级的文件以及创建日期,然后和你本地的这些文件相比较,如果时间比本地的新我们就提示有新版本,然后提供下载。
具体的现在我没有bcb环境,回到家里给你写。
ghs_linux@163.com联系我
smartrosesun 2005-07-23
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <inifiles.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int CurrVsion,DownVsion,dFilesCnt;


if(ConnectFtp("192.168.1.30","public"))
{
NMFTP1->Nlist() ;

CurrVsion = curentversn();
HostIp->Text = IntToStr(CurrVsion);
DownVsion = NewVersn() ;
Edit2->Text = IntToStr(DownVsion);
if(DownVsion>CurrVsion)
{

//改文件名字
/* TFileStream *OldFile = new TFileStream(GetCurrentDir() + "\\downupdt.ini", fmOpenRead);
TFileStream *NewFile = new TFileStream(GetCurrentDir() + "\\UpdateTab.ini", fmCreate);
NewFile->CopyFrom(OldFile, OldFile->Size);
NewFile->Free();
OldFile->Free(); */
/* FreeAndNil(NewFile);
FreeAndNil(OldFile); */
DeleteFile(GetCurrentDir() + "\\UpdateTab.ini");
RenameFile(GetCurrentDir() + "\\downupdt.ini",GetCurrentDir() + "\\UpdateTab.ini");



AnsiString updatelist(GetCurrentDir() + "\\UpdateTab.ini");
TIniFile *ini;
ini = new TIniFile(updatelist);


dFilesCnt = NewFilesCnt();
UserId->Text = IntToStr(dFilesCnt);
for(int i=0;i<dFilesCnt;i++)
{
AnsiString tmp=ini->ReadString( "filelist", IntToStr(i+1),"" );
Edit4->Text =tmp;

int j;
AnsiString dir;
bool t=false;

for(j=1;j<tmp.Length();)
{
dir+=tmp[j];
if(tmp[++j]=='\\')
{ t=true;
break;
}
}
if (!DirectoryExists(GetCurrentDir() + "\\"+dir)&&t)
{
if (!CreateDir(GetCurrentDir() + "\\"+dir))
throw Exception("Cannot create " + GetCurrentDir() + "\\f");
}




NMFTP1->Download("fsbupdate\\"+tmp,GetCurrentDir()+"\\"+tmp);
}

}
}





}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{

int versionum=0;
AnsiString updatelist(GetCurrentDir() + "\\UpdateTab.ini");

TIniFile *ini;
ini = new TIniFile(updatelist);
versionum = ini->ReadInteger("version","number",0);

}
//---------------------------------------------------------------------------


bool TForm1::ConnectFtp(AnsiString FtpIP,AnsiString UserID)
{
//TODO: Add your source code here
NMFTP1->Host = FtpIP;
NMFTP1->UserID =UserID;
NMFTP1->Connect();
if( NMFTP1->Connected )
return true;
else
return false;


}

int TForm1::curentversn() //得到当前的版本号
{
//TODO: Add your source code here
int versionum=0;
AnsiString updatelist(GetCurrentDir() + "\\UpdateTab.ini");

TIniFile *ini;
ini = new TIniFile(updatelist);
versionum = ini->ReadInteger("version","number",0);
ini->Free() ;

return versionum;
}

int TForm1::NewVersn()
{
//TODO: Add your source code here
AnsiString downupdt(GetCurrentDir() + "\\downupdt.ini");
NMFTP1->Download("fsbupdate\\UpdateTab.ini",downupdt);

int downupdtvernum=0;
TIniFile *ini;

ini = new TIniFile(downupdt);
downupdtvernum = ini->ReadInteger("version","number",0);

return downupdtvernum;

}

int TForm1::NewFilesCnt() //得到要下载的更新文件个数
{
//TODO: Add your source code here

int FilesCnt=0;
AnsiString downupdt(GetCurrentDir()+"\\UpdateTab.ini");
Edit4->Text = downupdt;
TIniFile *ini;
ini = new TIniFile(downupdt);

FilesCnt = ini->ReadInteger("filescount","number",0);

return FilesCnt;
}




int TForm1::CreatDirN(AnsiString tmp)
{
//TODO: Add your source code here
int i;
AnsiString dir;
bool t=false;

for(i=1;i<tmp.Length()+1;)
{
dir+=tmp[i];
if(tmp[++i]=='/')
{ t=true;
break;
}
}
if (!DirectoryExists(GetCurrentDir() + "\\"+dir)&&t)
{
if (!CreateDir(GetCurrentDir() + "\\"+dir))
throw Exception("Cannot create " + GetCurrentDir() + "\\f");
}
}
seeyou1997 2005-07-22
  • 打赏
  • 举报
回复
seeyou_1997@163.com
高手多谢了!!
a2290757 2005-07-22
  • 打赏
  • 举报
回复
我也想要,先谢谢高手了 baixg046@163.com
chinabh 2005-07-22
  • 打赏
  • 举报
回复
me too ,jinxiong41901@163.com
fancyfay 2005-07-21
  • 打赏
  • 举报
回复
大哥,我也要.meirener0118@sina.com.cn
Rex_love_Burger 2005-07-21
  • 打赏
  • 举报
回复
俺也想要
extensi@163.com
wolf_z 2005-07-20
  • 打赏
  • 举报
回复
wolf_z@tom.com
youngzi 2005-07-20
  • 打赏
  • 举报
回复
我也想要,young@topsee.com,我会开帖相谢
smartrosesun 2005-07-19
  • 打赏
  • 举报
回复
我做过,我是用TNWFTP控件做的,就是从FTP上先下载一个INI文件,和本地的INI文件比较里面的版本号,如版本号高,则按照刚下载的INI文件下载要升级的文件,我这有源码,想要留个邮箱吧
这是一款稳定,高效的多国语言开发包。只需要添加几个控件就可以使您的项目拥有各种语言的版本,并提供给用户多种语言的选择功能。您也可以方便的将以有的程序快速的升级到多国语言的版本。以及开发一个真正的UNICODE程序。功能描述 自带一套完整的UNICODE 标准控件,支持制作真正的UNICODE程序。并提供相应的多国语言类。NEW!! 自动在应用程序的当前目录下搜索可用的语言描述文件,或是使用指定的语言描述文件。 指定应用程序默认所使用的语言类型,或者让程序根据系统的默认字符集设置,自动使用相应的语言。 加载语言描述文件时,自动改变程序的字符集设置。 在应用程序启动,或更改使用的语言时,自动改变窗体(或Frame,DataModule,QuickReport)上的所有控件的文字。 自定义加载语言描述文件时,窗体控件的哪些属性将被更改。 支持所有已知或未知的组件。 只需要一行代码,就可以让程序轻松的提供给用户语言选择菜单。 通过OnLanguageChanged()事件,可以在语言描述文件被加载时,做一些额外的转换工作。 可以在语言描述文件中使用带参数的字符串,方便的组合出字符串,(用法类似于Format函数)。 所有窗口,与使用了多国语言基类的其它类,都可以在应用程序改变当前语言时,立刻更新为新的语言。 方便的从已有程序升级到支持多国语言的程序

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧