天天看点

近期工作小结

一,Base64编解码。参考文章:《使用混合脚本编程来实现的Base64编码》,《使用混合脚本编程来实现的Base64解码》

二, 需求如下:一张jpg图片,将其字节数组按Base64编码后传递给客户端,客户端将此Base64编码的字符串解码后,最后还原为jpg图片。第一步Base64解码请参考(1)中提到的文章《使用混合脚本编程来实现的Base64解码》,下面给出还原为jpeg图片的代码片段:

 复制代码

Code

CString rawByteStr = imgData; //解码后的图片字节数组字符串

//高4位字节映射表

map<TCHAR,int> mapTable1;

mapTable1['f'] = 240;

mapTable1['e'] = 224;

mapTable1['d'] = 208;

mapTable1['c'] = 192;

mapTable1['b'] = 176;

mapTable1['a'] = 160;

mapTable1['9'] = 144;

mapTable1['8'] = 128;

mapTable1['7'] = 112;

mapTable1['6'] = 96;

mapTable1['5'] = 80;

mapTable1['4'] = 64;

mapTable1['3'] = 48;

mapTable1['2'] = 32;

mapTable1['1'] = 16;

mapTable1['0'] = 0;

//低4位字节映射表

map<TCHAR,int> mapTable2; 

mapTable2['f'] = 15;

mapTable2['e'] = 14;

mapTable2['d'] = 13;

mapTable2['c'] = 12;

mapTable2['b'] = 11;

mapTable2['a'] = 10;

mapTable2['9'] = 9;

mapTable2['8'] = 8;

mapTable2['7'] = 7;

mapTable2['6'] = 6;

mapTable2['5'] = 5;

mapTable2['4'] = 4;

mapTable2['3'] = 3;

mapTable2['2'] = 2;

mapTable2['1'] = 1;

mapTable2['0'] = 0;

//从字节数组字符串还原为字节数组

int count = rawByteStr.GetLength()/2;//字节数

BYTE* Buffer = new BYTE[count]; //目标字节缓冲区

int i,j;

for (i=0,j=0;i<rawByteStr.GetLength();i+=2)

{//计算并填充每个字节

int sum = mapTable1[rawByteStr[i]]+mapTable2[rawByteStr[i+1]];

Buffer[j++] = sum;

}

//将字节数组写入jpeg文件

DWORD BytesWritten;

HANDLE hTempFile;

BOOL fSuccess;

CString tmpFile = _T("C:\\tmpImg.jpg");

hTempFile = CreateFile(tmpFile.GetBuffer(10), // file name 

GENERIC_WRITE, // open r-w 

0, // do not share 

NULL, // default security 

CREATE_ALWAYS, // overwrite existing

FILE_ATTRIBUTE_NORMAL,// normal file 

NULL); // no template 

fSuccess = WriteFile(hTempFile, 

Buffer, 

count,

&BytesWritten, 

NULL); 

CloseHandle(hTempFile);

delete [] Buffer;

复制代码

三,CodeProject上一个不错的显示图片的控件。文章链接:《WndImage Control》

四,二代身份证机具读写操作。参考文章:《不同机具的通用的第二代居民身份证读写》

五,在MFC中使用GDI+

1,在头文件中将GDI+的头文件包含进来

#include <GdiPlus.h>

using namespace Gdiplus;

2,声明如下变量:

GdiplusStartupInput gdiplusStartupInput;

ULONG_PTR gdiplusToken;

3,初始化和析构

BOOL CEhcicsApp::InitInstance()

{

    ……

    //    Initialize GDI+

    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    return FALSE;

int CMyApp::ExitInstance()

    //    Release Gdi+ lib

    GdiplusShutdown(gdiplusToken);

    return CWinApp::ExitInstance();

六,使用FTP上传/下载文件

1,在头文件中将要使用的网络头文件包含进来

#include "afxinet.h"

CFtpConnection *m_pFtpConnection;

CInternetSession m_Session;

3,在OnInitDialog 或者InitInstance中加入:

m_pFtpConnection = NULL;

try

    // Here usr is the username, pwd is the password 

    // and ftpsite.com is the name of the ftp site which

    // you want to connect to.

    m_pFtpConnection = m_Session.GetFtpConnection("ftpSite.com","usr","pwd",INTERNET_INVALID_PORT_NUMBER);

catch(CInternetException *pEx)

    pEx->ReportError(MB_ICONEXCLAMATION);

    m_pFtpConnection = NULL;

    pEx->Delete();

4,要上传文件,加入如下代码:

CFileFind Finder;

CString strFileName;

// Here c:\\Myfile.bmp is the name of the file that you want 

// to upload. It neednt necessarily be a bitmap file. You 

// can upload any file that you want to.

// The CString strFileName is used so that the same name 

// is uploaded to the ftp server.

// After uploading, the file in the ftp server will have 

// the same name as your local file.

// You can also rename it to anything

if(Finder.FindFile("C:\\Myfile.bmp")==TRUE)

    Finder.FindNextFile();

    strFileName = Finder.GetFileName();

    Finder.Close();

BOOL bUploaded = m_pFtpConnection->PutFile("C:\\Myfile.bmp",strFileName,FTP_TRANSFER_TYPE_BINARY,1);

AfxMessageBox("Uploaded Successfully");

5,要下载文件,加入如下代码:

m_pFtpConnection->GetFile("File.ext","C:\\File.ext",TRUE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY,1);

6,关闭连接

m_Session.Close();

m_pFtpConnection->Close();

if(m_pFtpConnection!=NULL)

delete m_pFtpConnection;

七,Oracle卸载。

1)开始->设置->控制面板->管理工具->服务停止所有Oracle服务;

2)开始->程序->Oracle – OraDb10g_home1>Oracle Installation Products-> Universal Installer 卸装所有Oracle产品

3)在注册表中删除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

4)在注册表中,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,删除所有Oracle入口;

5)在注册表中,选择

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口;

6)删除c:\Program Files\Oracle目录;

7)重新启动计算机,重启后才能完全删除Oracle所在目录 ;

8)删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,并从Windows XP目录(一般为d:\WINDOWS)下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、 oraodbc.ini等等;

八,IBM Lotus文档型数据库导出到关系型数据库。

解决方案:利用IBM提供的NotesSQL驱动程序,在java代码中利用JDBC-ODBC桥去连接Lotus数据库,从而读取出Lotus数据库中的数据。

值得注意的两个地方:NotesSQL不支持Lotus中表单的中文域,并且表单名中不能包含’-‘这样特殊的字符,再有一个就是表单如果改名称,则在JDBC程序看来会被视为建立一个新表,而不是原表的简单改名。因此在设计Lotus表单和视图时,为了减轻后来维护者的痛苦考虑,万望加倍小心。

此外,还有其他的导出工具和手段,但用JDBC连接Lotus应该是最简单的一种了。

本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/09/13/1290578.html,如需转载请自行联系原作者