c++ builder 常用函数汇总(1)
- 格式:doc
- 大小:28.50 KB
- 文档页数:2
在编程的过程中,文件的操作是一个经常用到的问题,在C++Bui lder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于W INAPI的文件操作;4、基于BCB库的文件操作;5、特殊文件的操作。
壹、基于C的文件操作在A NSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。
一、流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typed ef st ruct{int leve l; /* fill/empt y lev el of buff er */unsi gnedflags; /*Filestatu s fla gs */char fd;/* Fi le de scrip tor */uns igned char hold; /*Unget c cha r ifno bu ffer*/in t bsi ze; /* Buf fer s ize */uns igned char _FAR *buf fer;/* Da ta tr ansfe r buf fer */uns igned char _FAR *cur p; /* Curr ent a ctive poin ter */uns igned iste mp; /* Tem porar y fil e ind icato r */short toke n; /* Used forvalid ity c hecki ng */} FI LE; /* Thi s isthe F ILE o bject */FIL E这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能fope n() 打开流f close() 关闭流fp utc()写一个字符到流中fget c() 从流中读一个字符f seek() 在流中定位到指定的字符fputs() 写字符串到流fget s() 从流中读一行或指定个字符fp rintf() 按格式输出到流fsc anf()从流中按格式读取feof() 到达文件尾时返回真值ferro r() 发生错误时返回其值rewin d() 复位文件定位器到文件开始处r emove() 删除文件f read() 从流中读指定个数的字符fwrit e() 向流中写指定个数的字符tmp file() 生成一个临时文件流tm pnam() 生成一个唯一的文件名下面就介绍一下这些函数1.fo pen()fo pen的原型是:FI LE *f open(const char *fil ename,cons t cha r *mo de),f open实现三个功能为使用而打开一个流把一个文件和此流相连接给此流返回一个FI LR指针参数fil ename指向要打开的文件名,mode表示打开状态的字符串,其取值如下表字符串含义"r"以只读方式打开文件"w"以只写方式打开文件"a"以追加方式打开文件"r+"以读/写方式打开文件,如无文件出错"w+"以读/写方式打开文件,如无文件生成新文件一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\n',而二进制模式认为它是两个字符0x0D, 0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。
1 串口接收程序使用:int i,j;String s;unsigned char *ReadBuffer=(char *)malloc(BufferLength);memcpy(ReadBuffer,Buffer,BufferLength); //C语言基础性东西for(i=0;i<BufferLength;i++){s = s + IntToHex(*ReadBuffer++,2)+ ' ';存}Memo1->Text = Memo1->Text + s;Memo1->SelStart = Memo1->Text.Length();Memo1-> SelLength = 0;// free(ReadBuffer);//因为使用了ReadBuffer计算故不能释放内2 将Edit中的内容输入十六进制转换(其实是字符串转换为十六进制发送)AnsiString HexValue= "0x "+Edit1-> Text;int DecValue=StrToInt(HexValue);再进化一下TestCmd[i++] = StrToInt("0x"+Edit2->Text);2 Read txtvoid __fastcall TForm1::Button1Click(TObject *Sender) {StringGrid1-> Align=alClient;StringGrid1-> ColCount=5;StringGrid1-> Cells[0][0]= "城市 ";StringGrid1-> Cells[1][0]= "天气 ";StringGrid1-> Cells[2][0]= "最低气温 ";StringGrid1-> Cells[3][0]= "最高气温 ";StringGrid1-> Cells[4][0]= "风力 ";char const *Path = "aaa.txt ";if(!FileExists(Path))return;TStringList * thelist=new TStringList();thelist-> LoadFromFile(Path);int rowCount;rowCount=thelist-> Count;StringGrid1-> RowCount=rowCount;TStringList * list2=new TStringList();for(int k=0;k <rowCount-1;k++){String s;s=thelist-> Strings[k];s=AnsiReplaceStr(s, ", ", "\n\r ");list2-> Clear();list2-> DelimitedText=s;StringGrid1-> Cells[0][k+1]=list2-> Strings[0];StringGrid1-> Cells[1][k+1]=list2-> Strings[1];StringGrid1-> Cells[2][k+1]=list2-> Strings[2];StringGrid1-> Cells[3][k+1]=list2-> Strings[3];StringGrid1-> Cells[4][k+1]=list2-> Strings[4];}delete list2; list2=0;delete thelist; thelist=0;}3 循环时响应外部事件在循环的时候,操作窗口不能动作,可在循环中加入:Application->ProcessMessages();this->Update();注意不是在程序刚开始加入就OK,而是要在每次循环中加入才能起作用4 增加换行String + char(13)+char(10)5同一事件共用代码如何在CB中用Sender实现代码重用?答:面向对象的编程工具的特点之一就是要提高代码重用性(Reuse),宝兰的BCB当然可以实现这一功能。
c语言常用函数大全及详解C语言是一种通用的、面向过程的编程语言,被广泛应用于系统软件、嵌入式开发以及科学计算领域。
在C语言中,函数是一种模块化编程的基本方法,通过函数可以将一段代码进行封装和复用,提高了代码的可读性和可维护性。
本文将介绍一些C语言中常用的函数,并详细解释其用法及重要参数。
一、数学函数1. abs()函数函数原型:int abs(int x);函数功能:返回x的绝对值。
参数说明:x为一个整数。
2. pow()函数函数原型:double pow(double x, double y);函数功能:计算x的y次方。
参数说明:x和y为两个double类型的实数。
3. sqrt()函数函数原型:double sqrt(double x);函数功能:计算x的平方根。
参数说明:x为一个double类型的实数。
二、字符串函数1. strcpy()函数函数原型:char* strcpy(char* destination, const char* source);函数功能:将source字符串复制到destination字符串。
参数说明:destination为目标字符串,source为源字符串。
2. strlen()函数函数原型:size_t strlen(const char* str);函数功能:计算str字符串的长度。
参数说明:str为一个以'\0'结尾的字符串。
3. strcat()函数函数原型:char* strcat(char* destination, const char* source);函数功能:将source字符串拼接到destination字符串的末尾。
参数说明:destination为目标字符串,source为源字符串。
三、文件操作函数1. fopen()函数函数原型:FILE* fopen(const char* filename, const char* mode);函数功能:打开一个文件,并返回文件指针。
C++Builder一些小技法怎样在C++Builder中创建使用DLL自从C++Builder从去年浪漫情人节上市以来,吸引了大量的Delphi、VC、Vb的程序员到它的怀抱,大量的C、C++程序员感叹道:总算有了C的可视化开发工具,对我也是一样,从BC、Delphi到C++Builder。
动态链接库(DLL)是Windows编程常遇到的编程方法,下面我就介绍一下在BCB (C++Builder下简称BCB) 中如何创建使用DLL和一些技巧。
一、创建:使用BCB File|NEW建立一个新的DLL工程,并保存好文件BCB,生成一个DLL的程序框架。
1.DllEntryPoint函数为一个入口方法,如果使用者在DLL被系统初始化或者注销时被调用,用来写入对DLL的初始化程序和卸载程序;参数:hinst用来指示DLL的基地址;reason用来指示DLL的调用方式,用于区别多线程单线程对DLL的调用、创建、卸载DLL;2.在程序中加入自己所要创建的DLL过程、函数;3.用dllimport描述出口;例程序如下:#include#pragma hdrstopextern 揅?__declspec(dllexport) int test();int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*){return 1;}int test(){return 3;}注意:动态链接库中调用过程、函数时有不同的CALL方式__cdecl、__pascal, __fastcall、__stdcall,BCB中默认的方式为__cdecl(可不写),如果考虑兼容性可用时__stdcall声明方法为:extern 揅?__declspec(dllexport) int __stdcall test();对于其中过程、函数也改为:int __stdcall test()二、使用DLL在BCB中使用DLL有两种方法:1.用静态调用法首先需要在BCB的项目中加入输入接口库(import library),打开工程项目,使用BCB View|Project Manager打开项目列表,向项目中加入接口库(*.lib)。
C++Builder 常用String关于AnsiSting的使用大全(1)arrow:Ansistring 转char代码:void __fastcall TForm1::Button1Click(TObject *Sender) {AnsiString Test = "哈哈";char *chr = Test.c_str();}char转Ansistring代码:#include <windef.h>void __fastcall TForm1::Button1Click(TObject *Sender) {AnsiString str = "Sample";char chr[MAX_PATH];strcpy( chr , str.c_str() );}ansistring转int代码:void __fastcall TForm1::Button1Click(TObject *Sender) {AnsiString Test = "123";int i = StrToInt( Test );}int转ansistring代码:void __fastcall TForm1::Button1Click(TObject *Sender) {int i = 123;AnsiString str = IntToStr( i );}ansisting转double代码:void __fastcall TForm1::Button1Click(TObject *Sender) {AnsiString Test = "123";long double d = StrToFloat( Test );}double转ansistring代码:void __fastcall TForm1::Button1Click(TObject *Sender){double d = 123.456;AnsiString str = FloatToStr( d );}double转ansistring并四舍五入代码:void __fastcall TForm1::Button1Click(TObject *Sender){long double d = 123.456121212;AnsiString str = FloatToStrF( d , ffFixed ,5 , 4 );//说明FloatTostrF里5代表从第几个数字的后一位开始四舍五入,4代表取4位小数。
C++_Builder常⽤的属性及⽅法_Rio(C++Builder控件常⽤属性)2011.7.13⽂本输⼊组件:单⾏⽂本:Edit, MaskEdit –>窗⼝控件多⾏⽂本:Memo, RichEdit另外可⽂本显⽰:LabelEdit控件属性列表:1, (String) Text ⽤于获取编辑框中的⽂本字符串。
2, (Integer) MaxLength 指定编辑框中所能容纳的最⼤字符数。
缺省为0, 表⽰长度不限。
3, (Char) PasswordChar 设置为除#0之外的任何字符。
通常设置为星号(*)作密码。
4, (Bool) ReadOnly 当其值为true时,表⽰只读。
Label控件属性列表:1, (String) Caption 指定标签的标题。
2, FocusControl 属性是窗⼝控件类,⽤来指定⼀个与标签相连的窗⼝控件。
从⽽允许这个控件使⽤快捷键来获得输⼊焦点。
For Example:→Caption内输⼊“&N姓名”→ FocusControl下选择Edit1→⽤户按下ALT+N,实现快速定位2011.7.14编辑框常⽤组件:1, OnKeyPress 按下回车键2, OnChange 编辑框内⽂本发⽣变化3, OnEnter 编辑框获得焦点4, OnExit 编辑框失去焦点Memo控件属性列表:1, (TString) Lines 由多个字符串组成,每⼀个字符串是其⼀个元素。
Memo组件每⼀⾏⽂本都是Lines中的⼀个字符串。
可以在其value列上设置默认⽂本。
2, Alignment 确定Memo组件中⽂本显⽰的对齐⽅式。
taLeftJustify,taCenter和taRightJustify。
3, WordWrap 确定⽂本到达右边界时是否⾃动换⾏。
4, WantReturn 确定⽤户是否在⽂本中插⼊回车符。
5, WantTabs 确定⽤户是否在⽂本中插⼊Tab符。
C++Builder常用的文件函数C++Builder常用的文件函数用友定向委培ERP顾问就业大客户部JAVAV工程师权威认证广州中星报MCSE送CCNA3600元专家解说.net编程的方便性系统管理员初级程序员软件开发工程师数据库工程师高级项目经理界面设计经理中国IT实验室收集整理佚名 2008-8-16 保存本文推荐给好友收藏本页欢迎进入C/C++编程社区论坛,与200万技术人员互动交流>>进入常用的文件函数说明如表7—2所示。
这些函数定义了文件的许多方面,包括文件名、状态和当前位置。
在概念上,文件指针标志一个指定的磁盘文件。
一个文件指针是一个指向文件有关信息的指针。
这些信息定义了文件名、文件的状态和当前位置等。
文件指针是一个FILE型指针变量,在stdio-h里已定义。
(1)打开文件:·语法:FILE*fopen(const char*filename,const char*mode)。
·功能:以指定模式打开文件。
·说明:chin。
*fi。
lename:可以为一个字符串,用它来代表要打开的文件或设备,若文件不在目前的文件夹下,就必须在文件名前加上路径名称。
char mode(模式):用来设置要打开文件属于哪种类型的数据文件以及数据存取模式,如表7—3所示。
(2)关闭文件:· 语法:int fclose(FILE*stream)。
·功能:将文件指针所对应的数据文件关闭。
·说明:Stream为文件指针,fclose(falel)。
任何已打开的文件,不再使用时,要记得关闭,这样才能将占用的缓冲区归还系统。
以w或a模式打开的文件,fclose函数会先将存放在缓冲区那的数据写入文件中,再将数据文件关闭。
(3)测试文件:·语法:int feof(FILE*stream)。
·功能:用来测试文件是否结束。
·说明:再渎取数据文件中的数据时,可用feof函数来判断文件的指针是否已经指到文件的结尾。
C++Builder中的⼀些公共函数//C++Builder中的⼀些公共函数//根据SQL语句返回记录集int __fastcall TGlobalFun::GetRecordCount(AnsiString sql){int ret=0;ptquery->Active = false;ptquery->SQL->Text = sql;try{ptquery->Open();ret= ptquery->RecordCount;}catch (Exception &e){Application->ShowException(&e);ret = 0;}ptquery->Active = false;return ret;}//将表中的数据填充到下拉列表框中void __fastcall TGlobalFun::FillComBox(TComboBox *cmb,AnsiString tableName,AnsiString colName) {if(tableName == "" || colName == "") return;AnsiString sql;sql = "select distinct "+colName+" as col from "+tableName;ptquery->Active = false;ptquery->SQL->Text = sql;ptquery->Open();if(ptquery->RecordCount<1) return;//Ìî³äcmb->Clear();cmb->Items->Add("");ptquery->RecNo = 1;{if(ptquery->FieldByName("col")->AsString != "")cmb->Items->Add(ptquery->FieldByName("col")->AsString);ptquery->Next();}while(!ptquery->Eof);ptquery->Active = false;return;}//应⽤举例//调⽤全局函数FillComBox:cmbSafeItem为下拉列表框的name , P_Safety为表名,SafeItem / /为列名g_Global.FillComBox(cmbSafeItem,"P_Safety","SafeItem");对于下拉列表框还有个属性stytle:设置下拉列表的样式,⽐如只能选择等//检查数据的合法性:只能输⼊数字和退格需要引进#include <Qt.hpp>头⽂件//控制txtCarId控件只能输⼊数字和退格void __fastcall TFrm_Permit::txtCarIdKeyPress(TObject *Sender, char &Key){if(( Key >= Key_0)&&(Key <= Key_9) || (Key =='\b')){}else{Key = Key_Escape;}}只能输⼊数字和退格和⼩数点//控制txtBuyMoney控件只能输⼊数字和退格和⼩数点void __fastcall TFrm_Permit::txtBuyMoneyKeyPress(TObject *Sender,char &Key){if (( Key >= Key_0)&&(Key <= Key_9) || (Key == '.') ||(Key =='\b' )){}elseKey = Key_Escape;}}//函数CheckEmptybool __fastcall TGlobalFun::CheckEmpty(TWinControl *com,AnsiString str,const int param) {bool ret=true;AnsiString value="";int len=0;//获取控件中要检验的值if(AnsiString(com->ClassName())== "TEdit"){TEdit *pt = (TEdit *)com;value = pt->Text;len = pt->MaxLength/2;} elseif(AnsiString(com->ClassName())== "TComboBox"){TComboBox *cb = (TComboBox *)com;value = cb->Text;len = cb->MaxLength/2;}//检查是否为空if ((param & _EMPTY) == 0x01){if(value == ""){MessageBox(NULL,(str+"不能为空!").c_str(),"提⽰",MB_OK|MB_ICONERROR);if(AnsiString(com->Parent->ClassName()) != "TForm")com->Parent->Show();com->SetFocus();return false;}}if(value == "") return true;//检查是否是数字if ((param & _NUM) == 0x02)try{StrToInt(value);}catch(...){MessageBox(NULL,(str+"请⽤数字输⼊!").c_str(),"提⽰",MB_OK|MB_ICONERROR);if(AnsiString(com->Parent->ClassName()) != "TForm")com->Parent->Show();com->SetFocus();return false;}}//检查是否float类型if ((param & _FLOAT) == 0x04){try{StrToFloat(value);}catch(...){MessageBox(NULL,(str+"输⼊不正确!").c_str(),"提⽰",MB_OK|MB_ICONERROR);if(AnsiString(com->Parent->ClassName()) != "TForm")com->Parent->Show();com->SetFocus();return false;}}//检查数据是否为Date类型if ((param & _DATE) == 0x08){try{StrToDate(value);}catch(...){MessageBox(NULL,(str+"请⽤正确的⽇期格式输⼊!").c_str(),"提⽰",MB_OK|MB_ICONERROR); if(AnsiString(com->Parent->ClassName()) != "TForm")com->Parent->Show();com->SetFocus();return false;}//检查长度是否合法,根据控件的maxlengthif ((param & _LENGTH) == 0x10){if(WideString(value).Length() > len){MessageBox(NULL,(str+"输⼊长度不合法!").c_str(),"提⽰",MB_OK|MB_ICONERROR);if(AnsiString(com->Parent->ClassName()) != "TForm")com->Parent->Show();com->SetFocus();return false;}}return ret;}//应⽤举例if(g_Global.CheckEmpty(txtItemMoney,"±£ÏÕ½ð¶î",_EMPTY)==false) return;if(g_Global.CheckEmpty(txtBeginTime,"ÆðʼÈÕÆÚ",_DATE)==false) return;//获得TableName表中FieldsName字段的新编号int __fastcall TGlobalFun::GetNewID(AnsiString TableName,AnsiString FieldsName){AnsiString strSQL;int mNewID = 0,mID;strSQL = "select " + FieldsName + " from " + TableName +" where DepID = '" + g_Global.g_SysInfor.DepID + "' order by " + FieldsName + " Asc";ptquery->Active = false;ptquery->SQL->Text = strSQL;try{ptquery->Open();if(ptquery->RecordCount>0){ptquery->RecNo = 1;mNewID = 0;do{if (mNewID != mID) break;mNewID++;ptquery->Next(); }while(!ptquery->Eof); }}catch(...){;}ptquery->Active = false;return mNewID;}。
(1)new可用来生成动态无名变量,如 int *p=new int;int *p=new int [10]; //动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量又如:int *p1;double *p2;p1=new int(12);p2=new double [100];l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;l 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;对于生成二维及更高维的数组,应使用多维指针。
以二维指针为例int **p=new int* [row]; //row是二维数组的行,p是指向一个指针数组的指针for(int i=0; i<row; i++)p[i]=new int [col]; //col是二维数组的列,p是指向一个int数组的指针删除这个二维数组for(int i = 0; i < row; i++)delete []p[i]; //先删除二维数组的列delete []p;(2)使用完动态无名变量后应该及时释放,要用到 delete 运算符delete p; //释放单个变量delete [ ] p;//释放数组变量(不论数组是几维)相比于一般的变量声明,使用new和delete 运算符可方便的使用变量。
编辑本段详细分析“new”是C++的一个关键字,同时也是操作符。
关于new的话题非常多,因为它确实比较复杂,也非常神秘。
new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。
当然,如果我们创建的是简单类型的变量,那么第二步会被省略。
假如我们定义了如下一个类A:class A{int i;public:A(int _i) :i(_i*_i) {}void Say() {cout<<"i="<<i<<endl;}};//调用new:A* pa = new A(3);那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):A* pa = (A*)malloc(sizeof(A));pa->A::A(3);return pa;虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的。
c++ builder 常用函数汇总
对话框类函数
打开对话框:
if(OpenDialog1->Execute())
{
Memo1->Lines->LoadFromFile(OpenDialog1->FileName); }
保存对话框:
if(SaveDialog1->Execute())
{
Memo1->Lines->SaveToFile(SaveDialog1->FileName); }
其它常用函数ShowMessage(s);//显示信息
例子:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
ShowMessage("Hello Word!");
int i=1000;
ShowMessage(i);
}
//--------------------------------------------------------------------------- Close();//退出程序
例子:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//--------------------------------------------------------------------------- Sleep(n);//延时n毫秒
例子:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Sleep(5000); //延时5000毫秒,即5秒钟
}
//---------------------------------------------------------------------------
字符串函数
如何取Memo中的某一行中的字符
例子:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//将Memo1中的第0行放到s中,注意,Memo控件的行号从0开始
String s=Memo1->Lines->Strings[0].c_str();
ShowMessage(s);
}
//---------------------------------------------------------------------------
SubString(index,count)//字符串裁减函数
Index为字符串的序号,从1开始,count为要裁减的长度,如:
String s=Edit1->Text;
ShowMessage(s.SubString(1,2));
IntToHex(n1,n2)//十进制转16进制,n1为要转换的数,
n2为转换的16进制的位数,如:
int i=255;
ShowMessage(IntToHex(i,2));
StrToInt(s)//字符串转数字,如:
String s="1234";
int i=4321 + StrToInt(s);
ShowMessage(i);
IntToStr(n)//数字转字符串,如:
int i=4321;
String s="1234" + IntToStr(i);
ShowMessage(s);。