colorful

zc qq:1337220912

 

C++读写文件

掌握文本文件读写的方法
了解二进制文件的读写方法

C++文件流:
fstream  // 文件流
ifstream  // 输入文件流
ofstream  // 输出文件流

//创建一个文本文件并写入信息
//同向屏幕上输出信息一样将信息输出至文件
#include<iomanip.h>
#include<fstream.h>
void main()
{
  ofstream f1("d:\\me.txt");           //打开文件用于写,若文件不存在就创建它
  if(!f1)return;                 //打开文件失败则结束运行
  f1<<setw(20)<<"姓名:"<<"廉东方"<<endl;     //使用插入运算符写文件内容
  f1<<setw(20)<<"家庭地址:"<<"河南郑州"<<endl;
  f1.close();                   //关闭文件
}
运行后打开文件d:\me.txt,其内容如下:
       姓名:廉东方
     家庭地址:河南郑州

文件操作:
打开文件
  文件名
    注意路径名中的斜杠要双写,如:
    "D:\\MyFiles\\ReadMe.txt"
  文件打开方式选项:
    ios::in    = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)
    ios::out    = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
    ios::ate    = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用
    ios::app    = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后
    ios::trunc   = 0x10, //在读写前先将文件长度截断为0(默认)
    ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用
    ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用
    ios::binary  = 0x80  //二进制格式文件
  文件保护方式选择项:
    filebuf::openprot;   //默认的兼容共享方式
    filebuf::sh_none;    //独占,不共享
    filebuf::sh_read;    //读共享
    filebuf::sh_write;   //写共享
  打开文件的方法
    调用构造函数时指定文件名和打开模式
    ifstream f("d:\\12.txt",ios::nocreate);         //默认以 ios::in 的方式打开文件,文件不存在时操作失败
    ofstream f("d:\\12.txt");                //默认以 ios::out的方式打开文件
    fstream f("d:\\12.dat",ios::in|ios::out|ios::binary); //以读写方式打开二进制文件
    使用Open成员函数
    fstream f;
    f.open("d:\\12.txt",ios::out);             //利用同一对象对多个文件进行操作时要用到open函数
检查是否成功打开
  成功:
    if(f){...}       //对ifstream、ofstream对象可用,fstream对象不可用。
    if(f.good()){...}
  失败:
    if(!f){...}       // !运算符已经重载
    if(f.fail()){...}
读写操作
  使用<<,>>运算符
  只能进行文本文件的读写操作,用于二进制文件可能会产生错误。
  使用函数成员 get、put、read、write等
  经常和read配合使用的函数是gcount(),用来获得实际读取的字节数。
读写二进制文件注意事项
  打开方式中必须指定ios::binary,否则读写会出错
  用read\write进行读写操作,而不能使用插入、提取运算符进行操作,否则会出错。
  使用eof()函数检测文件是否读结束,使用gcount()获得实际读取的字节数
关闭文件
  使用成员函数close,如:
  f.close(); 
  利用析构函数
  对象生命期结束时会检查文件是否关闭,对没有关闭的文件进行关闭操作。
随机读写文件
  通过移动文件读写指针,可在文件指定位置进行读写。
  seekg(绝对位置);      //绝对移动,    //输入流操作
  seekg(相对位置,参照位置);  //相对操作
  tellg();          //返回当前指针位置
  seekp(绝对位置);      //绝对移动,    //输出流操作
  seekp(相对位置,参照位置);  //相对操作   
  tellp();          //返回当前指针位置
  参照位置:
  ios::beg  = 0       //相对于文件头
  ios::cur  = 1       //相对于当前位置
  ios::end  = 2       //相对于文件尾
读写文本文件的示例
//为能够正确读出写入文件的各数据,各数据间最好要有分隔
#include<fstream.h>
void main()
{
  fstream f("d:\\try.txt",ios::out);
  f<<1234<<' '<<3.14<<'A'<<"How are you"; //写入数据
  f.close();
  f.open("d:\\try.txt",ios::in);
  int i;
  double d;
  char c;
  char s[20];
  f>>i>>d>>c;               //读取数据
  f.getline(s,20);
  cout<<i<<endl;             //显示各数据
  cout<<d<<endl;
  cout<<c<<endl;
  cout<<s<<endl;
  f.close();
}
运行结果:
1234
3.14
A
How are you
Press any key to continue
显示文本文件的内容
//使用get()一次读一个字符--------------------------------方案一
#include<fstream.h>
void main()
{
  ifstream fin("d:\\简介.txt",ios::nocreate);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  char c;
  while((c=fin.get())!=EOF)cout<<c;    //注意结束条件的判断
  fin.close();
}
//使用get(char *,int n,char delim='\n')一次读多个字符----方案二
//巧妙利用文本文件中不会有字符'\0'的特点进行读取
#include<fstream.h>
void main()
{
  ifstream fin("d:\\简介.txt",ios::nocreate);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  char c[80];
  while(fin.get(c,80,'\0')!=NULL)cout<<c; //注意结束条件的判断
  fin.close();
}
//使用read(char *,int n)读文件---------------------------方案三
#include<fstream.h>
void main()
{
  ifstream fin("d:\\简介.txt",ios::nocreate);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  char c[80];
  while(!fin.eof())            //判断文件是否读结束
  {
    fin.read(c,80);
    cout.write(c,fin.gcount());
  }
  fin.close();
}
拷贝文件
//二进制文件操作示例
#include<fstream.h>
void main()
{
  ifstream fin("C:\\1.exe",ios::nocreate|ios::binary);
  if(!fin){
    cout<<"File open error!\n";
    return;
  }
  ofstream fout("C:\\2.exe",ios::binary);
  char c[1024];
  while(!fin.eof())
  {
    fin.read(c,1024);
    fout.write(c,fin.gcount());
  }
  fin.close();
  fout.close();
  cout<<"Copy over!\n";
}

posted @ 2013-03-29 14:21 多彩人生 阅读(374) | 评论 (0)编辑 收藏

postgresql 编码

psql 里输入 \encoding 查看当前编码
    \encoding utf8   设置为utf8

posted @ 2013-03-05 18:40 多彩人生 阅读(418) | 评论 (0)编辑 收藏

flex

http://www.cnblogs.com/AS30/archive/2011/10/10/2205084.html  as3加载图片的两种方法

posted @ 2012-11-17 14:16 多彩人生 阅读(237) | 评论 (0)编辑 收藏

luabind常用方法总结

luabind比较复杂,功能包罗万象,但使用起来比较简单,特别是最常用的方法只有几个,下面结合一个简单的例子总结一下。     在我们游戏应用中,一般都是已c++为主导的,也就是说c++主动调用lua脚本。
先写一个比较常见的lua脚本:
  1. nGlobal = 10 --一个全局的整形变量   
  2. strGlobal = "hello i am in lua" --一个全局的字符串变量   
  3. --一个返回值为int类型的函数   
  4. function add(a, b)   
  5.     return a+b   
  6. end   
  7. --一个返回值为string类型的函数   
  8. function strEcho(a)   
  9.     print(a) 10   
  10.     return 'haha i have print your input param'   
  11. end   
  12. cppapi.testFunc() --调用c++暴露的一个测试函数   
  13. t={name='ettan', age=23, desc='正值花季年龄'}  
 
////////////////////////////////////lua脚本结束
下面写c++函数中的调用了
  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. #include<lua.hpp>  
  5. #include<luabind/function.hpp>  
  6. void testFunc()  
  7. {  
  8.     cout<<"helo there, i am a cpp fun"<<endl;  
  9. }  
  10. int main(int argc, char* argv[])  
  11. {  
  12.     //首先声明luaState环境  
  13.     using namespace luabind;  
  14.     lua_State* L = lua_open();  //也可以用luaL_newState()函数  
  15.     luaL_openlibs(L);   //注意将lua默认库打开,要不会出现N多错误的,比如print函数都没有  
  16.     //将c++中的函数暴露给lua  
  17.     module(L, "cppapi")  
  18.     [  
  19.         def("testFunc", (void(*)(void))testFunc)  
  20.     ];  
  21.     //加载lua脚本,我们临时起名test.lua  
  22.     luaL_dofile(L, "test.lua");  
  23.     try  
  24.     {  
  25.         //调用lua中的整形全局变量  
  26.         int nLuaGlobal =     luabind::object_cast<int>(luabind::globals(L)["nGlobal"]) ;  
  27.         //调用lua中的字符串变量  
  28.         string strLuaGlobal = luabind::object_cast<string>(luabind::globals(L)["strGlobal"]);  
  29.         //获取table,方法一,通过luabind::object 固有方法  
  30. luabind::object luaTable = luabind::globals(L)["t"] ;  
  31. string name=luabind::object_cast<string>(luaTable["name"]) ;  
  32.         int age = luabind::object_cast<int>(luaTable["age"]) ;  
  33.         //获取table,方法二,通过gettable  
  34.         string desc = luabind::object_cast<string>(luabind::gettable(luaTable,"desc"));  
  35.         //下面是调用lua中函数  
  36.         int nAddRes = luabind::call_function<int>(L, "add", 3, 4) ;  
  37.         string strEchoRes = luabind::call_function<string>(L, "strEcho", "c++参数") ;  
  38.     }  
  39.     catch(...)  
  40.     {  
  41.         cout<<"error"<<endl;  
  42.     }  
  43.     return 0;  
  44. }  
 
    我们目前常用的方法暂时就有这些,当然在实际编码中,c++暴露给lua的经常是c++类中的函数,只要稍加修改就行!

posted @ 2012-10-18 23:45 多彩人生 阅读(872) | 评论 (0)编辑 收藏

iconv的安装和使用

一。Linux下iconv的安装
包的下载页面http://www.gnu.org/software/libiconv/
$ ./configure --prefix=/usr/local
$ make
$ make install

安装时注意gettext和libiconv的一方更新,另一方需要更新的问题。
详细参考安装指南。

二。windows下安装iconv
下载路径:http://gnuwin32.sourceforge.net/packages/libiconv.htm
我的使用主要是利用iconv进行编程,故只使用了lib和头文件
1设置c/c++的 Additional Include Dictories,将头文件路径加入

2设置Linker下的General和Input,添加lib名字和lib路径。

3将charset.dll和iconv.dll放入生成可执行exe文件的目录下面

!!!注意:为了实现跨平台需要将*nix版的iconv.h和windows版本的合并,方法:利用
条件预编译#indef 。

posted @ 2012-10-17 17:57 多彩人生 阅读(4580) | 评论 (0)编辑 收藏

Linux WideCharToMultiByte WideCharToMultiByte

http://blog.csdn.net/hbhhww/article/details/7459501

Linux下面的没有命名为  () 和 MultiByteToWideChar() 函数,WideCharToMultiByte,MultiByteToWideChar是windows下的函数,在linux下也有类似的两个函数:

mbstowcs()
wcstombs()

值得注意的是:

size_t mbstowcs(wchar_t *wcstr,const char *mbstr,size_t count);

这个函数的第三个参数count,大小一定要是mbstr长度的2倍,否则出来的中文也会是乱码

 

测试一下:

 

    setlocale(LC_ALL,"zh_CN.GB18030");
    wchar_t wcstr[20] = L"字符测试123abc";

    int len = wcslen(wcstr)+1;
    printf("len = %d /n",len);
    for(int i = 0; i < len; i++)
        printf("0x%08x ",wcstr[i]);
    printf("/n");

    char str[55] = {0};   
    int n = wcstombs(str,wcstr,55);
    if(-1 == n)
    {
    perror("wcstombs ");
    exit(-1);
    }   
    printf("n = %d/n",n);
    for(int i = 0; i < n+1; i++)
        printf("0x%08x ",str[i]);
    printf("/n");   
    wchar_t wch[50]={0};
    int m = mbstowcs(wch,str,n);    
    if(m == -1)
    {
    perror("Converting");
    exit(-1);
    }
    printf("m = %d/n",m);
    for(int i =0; i<m+1;i++)
    printf("0x%08x ",wch[i]);
    printf("/n");
    return 0;
}

 

还有呢,转码还可以使iconv函数族,包含以下三个函数:
iconv_t iconv_open(const char *tocode, const char *fromcode);

size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);

int iconv_close(iconv_t cd);

 

 

测试一下:

#include <stdio.h>
#include <iconv.h>
#include <string.h>

#define BUFLEN 256

char outbuf[BUFLEN];
char inbuf[BUFLEN] = "characters convertion";

int main()
{    
     char *pin = inbuf;
     char *pout = outbuf;
       
     int inlen = strlen(pin);
     int outlen = BUFLEN;

     int retsize;

     iconv_t cd;

     cd = iconv_open("UTF-8", "GBK");

     if((iconv_t)-1 == cd) {
             perror("iconv_open error");
             return -1;
     }

     retsize = iconv(cd, &pin, (size_t *)&inlen, &pout, (size_t *)&outlen);

     if((size_t)-1 == retsize) {
             perror("iconv error");
             return -2;   
     }

     if(outlen > 0) {
             printf("%s/n", outbuf);
     }

     iconv_close(cd);

     return 0;
}

 

另外

 

关于Linux下转码的资料,这里比较全:

 

http://www.360doc.com/content/11/0119/14/1317564_87612492.shtml

posted @ 2012-10-17 17:56 多彩人生 阅读(1181) | 评论 (0)编辑 收藏

linux下递归删除目录下所有exe文件

今天给学校部署校庆网站,做网站的同学传给我的网站文件夹里,有很多exe文件,而且这些exe的文件名都是原来的目录名,看起来是他的机器中了病毒。虽然exe文件在linux下无法运行,但是还是要删除这些exe文件。

    在网上找了一下,《linux下递归删除某个文件夹或文件》给了我满意的方法,让我可以一次性删除某目录及其子目录下所有的exe文件。

find . -name '*.exe' -type f -print -exec rm -rf {} \;

(1) "."    表示从当前目录开始递归查找

(2) “ -name '*.exe' "根据名称来查找,要查找所有以.exe结尾的文件夹或者文件

(3) " -type f "查找的类型为文件

(4) "-print" 输出查找的文件目录名

(5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。

     exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号

posted @ 2012-09-29 11:03 多彩人生 阅读(454) | 评论 (0)编辑 收藏

centos下firefox的flash插件的安装与卸载

一定要注意系统的位数,是32位的还是64位的,我这里介绍的是32为的,64位的自行下载对应软件安装即可

 查看系统版本的命令:getconf LONG_BIT 返回32就是32位,返回64就是64位

(一)用rpm来安装

首先下载rpm安装包,选择的是32bit的最新安装包
wget http://fpdownload.macromedia.com/get/flashplayer/pdc/11.1.102.55/flash-plugin-11.1.102.55-release.i386.rpm
然后安装
rpm -i flash-plugin-11.1.102.55-release.i386.rpm
如此使用rpm方式flash插件就安装好了。如果想选择其他版本可以访问http://get.adobe.com/cn/flashplayer/

说说这个rpm包怎么卸载,两条命令
rpm -e flash-plugin
rpm -qa |grep ^flash-plugin

如果第二条命令返回为空怎么表示卸载干净了。

第一条命令rpm -e flash-plugin是卸载命令,第二条rpm -qa |grep ^flash-plugin是验证是否卸载成功了。

(二) 插件式

其实第二种我也不知道该如何命名,暂时先这么叫吧,如有确切或者更好的,请不吝赐教。

同样要先下载安装包
wget http://fpdownload.macromedia.com/get/flashplayer/pdc/11.1.102.55/install_flash_player_11_linux.i386.tar.gz
然后解压
tar zxvf install_flash_player_11_linux.i386.tar.gz
然后进入 cd install_flash_player_11_linux.i386
然后将libflashplayer.so文件移动到~/.mozilla/plugins/即可,其他文件不要。

如果不知道~/.mozilla/plugins/路径,可以使用
find / -name plugins
来查找,我得到的结果是

/etc/skel/.mozilla/plugins
/usr/lib/qt-3.3/plugins
/usr/lib/mozilla/plugins
/usr/lib/xulrunner-1.9.2/plugins
/usr/lib/krb5/plugins

所以就把libflashplayer.so移动到/usr/lib/mozilla/plugins文件夹下就OK了。

移动命令使用mv。具体请百度 google。

(三)浏览器选择安装法

最近有网友反映插件虽然安装了但是还是提示未安装,主要原因是版本选的不对。

为了能更好的解决这个问题,现加一个方法。

用firefox打开youtube或者其他视频网站,会提示你安装flash,然后点安装,会显示找不到(找到了更好),然后点左下角的那个链接,然后在新打开的网页里点,安装缺失插件,就跳到Adobe的网站了,在那里选择相应版本的插件下载安装就好了。

下载的时候选择.rpm那个大小在6M多吧,安装方法同(一)

posted @ 2012-09-28 19:25 多彩人生 阅读(1483) | 评论 (0)编辑 收藏

让CentOS 6/Fedora 15显示详细启动信息,不显示进度条

一些CentOS等Linux系统启动后可能会出现读进度条等待进入系统的过程,对于学习Linux启动过程非常不利,我们可以将它恢复到显示详细启动过程模式。

使用root用户修改 /boot/grub/grub.conf 文件。

[root@Slyar ~]# vim /boot/grub/grub.conf

找到下面的部分,将"rhgb"去掉,保存即可。其中"rhgb"表示"redhat graphics boot",就是图形进度条模式。而"quiet"表示在启动过程中只显示重要启动信息,类似硬件自检之类的消息不会显示,可以有选择地选用。

kernel /vmlinuz-2.6.32-71.el6.i686 ro root=UUID=697cb0d9-19f6-414a-90a1-5ceb2f40b03d rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet

posted @ 2012-09-28 09:36 多彩人生 阅读(366) | 评论 (0)编辑 收藏

用Vim搭建C/C++开发环境

 

http://blog.csdn.net/wooin/article/details/1858917
http://easwy.com/blog/archives/advanced-vim-skills-taglist-plugin/

 

-------------------------------------------------------

用Vim搭建C/C++开发环境

李若老师曾经说:世界上的程序员分三种,一种是用Emacs,一种是用Vim的,其它的归为第 三种。其意是说如果一个程序员两者都不用的话,那大抵是不能归为入流者行列的。对使用C/C++的人来说,很多人喜欢Emacs,据说与对 Stallman的崇拜与爱屋及乌有关;-) 当然,Emacs与Vim虽然在文本编辑方面的性能是等价的,但使用起来两者还是有很大的不同:Vim是为 程序员而开发的,功能强大而实用;Emacs除了文本编辑之外,作为Unix下的“第一个人工生命”,还可以通过插件完成各种包括听mp3,发邮件,甚至 煮咖啡的操作,所以,Emacs更像是一种“生活方式”。言归正传,我个人是用Vim的,在编写C/C++的程序时,只用Vim自身的功能还是不太爽的, 还需要其它的插件,将其构造成一个比VC爽得多的IDE。由于每个工具介绍清楚都不是一两句话说得完的,以下只列出插件的名称,具体的内容google之 即可;-)其中vim插件可以到VIMer最常去的www.vim.org下载

  1. Ctags,非vim插件。Ctags是Vim必不可少的工具,它可以将C/C++的宏、变量、函数、类等一系列信息提取出来,以方便切换。Ctags还可以使用更强大的cscope代替。
  2. Taglist,Vim插件。Taglist是与ctags的配合的vim的强大工具之一,其功能是将当前buffer的所有信息作成一个列表放在旁边,随时可以切换。
  3. omnicppcomplete,Vim插件。其功能顾名思义就是自动补全工具(可不是简单的Ctrl+N哦),比如定义了一个类叫myClass,生成一个实例myClass c; 那么输入c.之后就可以出现一个框,里面是c所有的成员函数。
  4. csupport,Vim插件。这是一个非常好的C/C++ ide,有了它什么编译运行一键搞定,定义一个类一键就可以给出一个模板格式,相当实用。
  5. clewn,非Vim插件。其用处是联结vim与gdb(没听说过gdb?google补个课吧~)。在打开clewn的时候,它利用 NetBeans,把gVim与gdb无缝地联结起来,还可以像matlab一样,在调试的时候把鼠标放在变量名上,就会有一个ballon出来显示这个 变量的指,炫吧?谁说只有emacs才能与gdb结合的好?另外它的另外一个替代品是VimGdb,这是个Vim插件。
  6. Doxygenkit。注释与文档合二为一的最强工具当然是Doxygen,有了Doxygenkit,用Vim写Doxygen格式一键搞定。

至此,我定制的Vim的C/C++IDE就搞定了,用起来比VC那个真是爽不知多少倍了。除了以上的插件外,Vim常用的还有Vimshell,project等工具,都有很炫的效果,请各位VIMers 自己体会

posted @ 2012-09-26 17:55 多彩人生 阅读(1773) | 评论 (2)编辑 收藏

仅列出标题
共25页: First 8 9 10 11 12 13 14 15 16 Last 

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜