//分割字符串
CString str = _T("ab ac dd PM");
TCHAR seps[] = _T(" ");
TCHAR* token = _tcstok( str.GetBuffer(), seps );
while( token != NULL )
{
MessageBox( token, token, MB_OK );
token = _tcstok( NULL, seps );
}
void CStrDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString ss="1212.12";
int temp=atoi(ss);
CString aa;
aa.Format("%d",temp);
AfxMessageBox("var is " + aa);
}
bool取值false和true,是0和1的区别
BOOL取值FALSE和TRUE,是0和非0的区别
注意:1:不管读/写文件,在读/写文件完之后一定要关闭文件(即IO流)。
2:注意以文本方式读/写文件和以二进制方式读写文件方式的区别。(如文本方式写文件遇到换行字符(10)自动转
为ASCIII代码1310,而读文件时反过来,即1310变为10。而二进制读/写文件却不变)。
读取t文件:
方法一:CStdioFile类 一行一行的读取整个文本文件
CString readText(CString fileName)//fileName为文件名
{
CStdioFile pFile;
CString str,rstr;//str为读取到的一行字符,rstr把所有读取到的str整合成一个字符串!
pFile.Open(fileName,CFile::modeRead);
while(pFile.ReadString(str))
rstr=rstr+str+"/r/n";
pFile.Close();
return rstr;
}
方法二:CFile类 一次性读取整个文件
CString readText(CString fileName)
{
CFile readFile(fileName,CFile::modeRead);
char *rBuf;//用于存放读取到的整个字符串的字符串指针
DWORD dwFileLen;//用于存放文件的长度
dwFileLen=readFile.GetLength();//获取文件的长度
rBuf=new char[dwFileLen+1];
rBuf[dwFileLen]=0;//字符串的结尾符
readFile.Read(rBuf,dwFileLen);//读取指定长度(dwFileLen)的字符串并存放在指定的字符串指针(rBuf)
readFile.Close();
return rBuf;
}
方法三:C语言fread函数
CString readText(CString fileName)
{
FILE *pfile=fopen(fileName,"r");//r为读文件方式,默认为文本方法,rb为二进制方式!
fseek(pfile,0L,SEEK_END);//将文件指针移到文件尾处从而用ftell获得文件长度
long int len=ftell(pfile);//获取文件长度
rewind(pfile);//注意文件指针要移回到文件开始的地方
char *ch=new char[len+1];//文件长度加1是为了把结尾符设为0,也可不加1而用memset方法
ch[len]=0;//结尾设为0,以防出现乱码,也可用memset(ch,0,len);方法。
fread(ch,1,len,pfile);
fclose(pfile);
return ch;
}
写文件:
方法一:
void writeText(CString fileName,CString content)
{
FILE *pfile=fopen(fileName,"w");//w写文件方式,默认为文本方式。wb为二进制写文件方式
fwrite(content,1,strlen(content),pfile);
fclose(pfile);
}
方法二:
void writeText(CString fileName,CString content)
{
ofstream out(fileName);
out.write(content,strlen(content));
out.close();
}
当出现error C2110: cannot add two pointers时,是因为字符串相加不能以常量开头,举例如下:
strCheckSum = FREAM_LENGHT+ FREAM_TYPE + strResult;
FREAM_LENGHT、FREAM_TYPE 都是字符串常量宏,如果按照上面方式书写代码会出现上面的错误。
改为:strCheckSum = strCheckSum + FREAM_LENGHT+ FREAM_TYPE + strResult; 即可。
如果是char型的,用str.Format("%s",temp);
CString str="aa,bb,cc,dd,ee";
CString strTemp;
int nIndex=0, nLast=0;
while (nIndex != -1)
{
nIndex = str.Find(",", nLast);
if(nIndex != -1)
{
strTemp = str.Mid(nLast, nIndex - nLast);
nLast = nIndex + 1;
}
else
{
strTemp = str.Mid(nLast, str.GetLength() - nLast);
}
TRACE0(strTemp); // 你可以在这将它插入到数组中去.
}
这是VC编辑器的一个BUG,我也经常碰到,解决的办法就是打开看不到的那个类的头文件,随便加点东西比如加个空行,然后保
存,在ClassView中就会出现类了。
unsigned long __cdecl CloseZipZ
一般是头文件没有从工程中加进来---project ----add files to project
//SetCurrentDirectory();
DWORD nBufferLength;
LPTSTR lpBuffer ;
TCHAR tchBuffer[255];
lpBuffer = tchBuffer;
GetCurrentDirectory(nBufferLength,lpBuffer);
AfxMessageBox(lpBuffer);
//设置工作目录
SetCurrentDirectory(".//readzip//test//");
GetCurrentDirectory(nBufferLength,lpBuffer);
AfxMessageBox(lpBuffer);
回车,ASCII码13
换行,ASCII码10
空格,ASCII码32
ReadString功能就是遇到回车。。。换行就停止的
你要读好多行的话,弄个循环,把这个ReadString放在循环体里
问题2:
virtual LPTSTR ReadString(
LPTSTR lpsz,
UINT nMax
);
virtual BOOL ReadString(
CString& rString
);
第一种形态:当返回值为NULL,说明到达了文件尾
第二种形态:当返回值为FALSE,说明到达了文件尾
示例:
BOOL bEnd=TRUE;
while(bEnd)
{
bEnd=ReadString(str);
}
iter = find(m_filevector.begin(), m_filevector.end(), "Key 5000");
CString 转换为float型
(float)atof((char *)(LPTSTR)(LPCTSTR)strTemp)
book.SaveAs(COleVariant("C:2.xls"),covOptional,covOptional, //
covOptional,covOptional,covOptional,0,//
covOptional,covOptional,covOptional,covOptional);
books.Open("C:1.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
Excel颜色索引值
1.黑色
2.白色
3.红色
15.灰色
msdn中搜索主题GetHyperlinks
COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
Hyperlinks link = oRange.GetHyperlinks();
最好转换成CString的形式
link.Add(oRange,"#Sheet2!A1",vOpt,vOpt,COleVariant((short)group.at(i)->warnNum));
error LNK2001: unresolved external symbol "public: void __thiscall
一般是工程里面没有把文件加进来。
HOWTO: Create Automation Project Using MFC and a Type Library
const放在函数最后起什么作用
如:
float Circumference(void) const;
表明这个函数不会修改成员变量。
操作系统:win98
编程工具:vc++
问题:我在编译程序中老出现“fatal error C1010: unexpected end of file while looking for precompiled header directive”这一句,但我查看了程序并没有错,请问这是怎么一回事?
A回答:
肯定是一个新添加的类的.cpp文件开头没包含stdafx.h,在该文件最前面加上即可。
compress压缩函数:
pCompress 目标缓存区的指针
u32CompressLen 目标缓存区的大小
pSource源缓存区的指针
u32Source源缓存区的大小
(1)int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
把源缓冲压缩成目的缓冲, 就那么简单, 一个函数搞定
int uncompress (Bytef *dest, uLongf *destLen,const Bytef *source, uLong sourceLen);
vc 文件 内存映射
//只是对字符串操作的
int err;
Byte compr[200], uncompr[200]; // big enough
uLong comprLen, uncomprLen;
const char* hello = "12345678901234567890123456789012345678901234567890";
uLong len = strlen(hello) + 1;
comprLen = sizeof(compr) / sizeof(compr[0]);
err = compress(compr, &comprLen, (const Bytef*)hello, len);
if (err != Z_OK)
{
std::cerr << "compress error: " << err << '/n';
exit(1);
}
cout << "orignal size: " << len << " , compressed size : " << comprLen << '/n';
strcpy((char*)uncompr, "garbage");
//uncmpr = "garbage"
err = uncompress(uncompr, &uncomprLen, compr, comprLen);
if (err != Z_OK) {
cerr << "uncompess error: " << err << '/n';
exit(1);
}
cout << "orignal size: " << len << " , uncompressed size : " << uncomprLen << '/n';
if (strcmp((char*)uncompr, hello))
{
cerr << "BAD uncompress!!!/n";
exit(1);
} else
{
cout << "uncompress() succeed: /n" << (char *)uncompr;
}
操作系统:win98
编程工具:vc++
问题:我在编译程序中老出现“fatal error C1010: unexpected end of file while looking for precompiled header directive”这一句,但我查看了程序并没有错,请问这是怎么一回事?
A回答:
肯定是一个新添加的类的.cpp文件开头没包含stdafx.h,在该文件最前面加上即可。
char szCurPath[MAX_PATH];
memset(szCurPath,0,MAX_PATH);
GetModuleFileName(NULL,szCurPath,sizeof(szCurPath)/sizeof(char));
看了你的FindResource()的第一参数,它要求是HINSTANCE一个句柄的!!
HINSTANCE hInst = GetModuleHandle(“Mydll.dll”);
HRSRC hResource = FindResource(hInst, MAKEINTRESOURCE(你的资源ID),RT_RCDATA);
ASSERT(hResource!=NULL);