急! C++问题,菜鸟问题
如何在编译代码时让指定程序运行?需要的代码是什么?
如何在编译代码时让指定程序运行?需要的代码是什么?
答案:文件操作有很多函数和类的实现,对于很多初学者来说知道的可能也不多.一、文件的打开
在stdlib.h这个头文件里面有FILE类型,我们可以用它来保存打开的文件数据流,或者说是一个指针
FILE *m_pFile;
String filname("C:/abc.raw");
m_pFile=fopen(filname.getBytes(),"r");fopen函数用来打开,第一个参数是const char *类型,第二个是打开的模式,可以是只读"r"也可以是"w",第一个参数的路径文件夹之前要用反斜杠或者双斜杠,否则会找不到文件.
当然你也可以用CFile类,使用之前要加afx.h头文件
CString filename("C:/data.raw");
CFile cf;
cf.open(filename,CFile::modeRead);
第一个参数是一个LPCTSTR类型,是一个指向字符串的长指针,第二个参数是打开模式,
第一个参数如果直接用一个字符串常量的话会编译出错,说无法把const char[]类型转化为LPCTSTR类型,但是CString这个类可以被直接转换.
二、文件里面的定位
跟fopen对应的定位函数是fseek
fseek(m_pFile,0,SEEK_SET);
第一个参数是指向打开文件的FILE类型指针,第二个参数是跟第三个参数有关的,是相对于第三个参数的偏移量,第三个参数是指针起始定位,SEEK_SET表示定位到文件头,上面的意思是定位到文件头偏移0个字节的位置,SEEK_CUR是定位到指针当前位置,SEEK_END是定位到文件尾.
rewind(m_pFile);这个函数是定位到文件头的意思,跟上面的那句意思一样.不过在windows mobile 5.0系统里面的API中没有这个函数.
CFile类里定位成员函数是Seek,SeekToBegin,SeekToEnd这三个,看函数名就知道后面两个是定位到文件头和尾,第一个函数是定位到指定位置.
cf.Seek(289,CFile::begin);第一个参数是偏移量,当然是相对于第二个参数来说的,由于CFile::begin表示文件头,所以这一句的意思是定位到从文件头开始计算的289字节处.
后面两个函数就不用说了,是不带参数的.
三、文件的读写
同样的,fwrite函数,fread函数跟fopen,fseek是相对应的。
WORD *buffer;
fread(buffer,17*sizeof(WORD) ,1,m_pFile);
fwrite(buffer,17*sizeof(WORD) ,1,m_pFile);
第一个参数从文件中读出来保存数据的缓冲区或者已经存在数据的缓冲区,第二个参数是要读入或者要写入的数据长度,第三个参数是写入第二个参数长度数据有次数,如果改成是2,就是说写入buffer两次17*sizeof(WORD)长度的数据,一共是34*sizeof(WORD)长度;最后一个参数是文件流,前面也说过就不再解释。
CFile类里也不会缺少文件读写函数。
cf.Read(buffer,17*sizeof(WORD));
cf.Write(buffer,17*sizeof(WORD));
这两个函数比较简洁,我想大家一看就明白了吧,前面是要写入或者读出的缓冲区,后面是长度。
四、文件的关闭
我们打开文件之后会进行一系列的读写操作,在这些操作之后我们千万不要忘记把打开的文件关闭
与fopen对应的是fclose,语法为
fclose(m_pFile);关闭的就是文件流指针。
CFile类里面的是
cf.Close();
你是说条件编译嘛?是不是 #ifdef #endif 之类的啊? 这个命令可以选择你想执行的程序编译,其他的不编译,节省运行时间,如果是这个的话,我再把其他几个说出来,讲下左右,不是的话再说清楚些