wcstombs_s(&CharactersConverted, file,FileName.GetLength()+1,FileName, _TRUNCATE);在unicode模式编译通过...但由于某种原因我没有用unicode模式...编译失败...请教各位大大要怎么修改
解决方案 »
- 再散100分,周一结账,大家多多捧场呀
- 急,请问mfc中如何打开通用对话框的文件?
- xml与文本文件
- 由服务起的程序中不能得到环境变量? 如登陆用户等等.
- 菜单命令“文件/打开”项先前被我去掉了,现在又想添上,但重新添上后呈灰色不可用。为什么呢?
- 请问对话框界面切换后不能显示的问题???
- DLL中函数开辟的内存区如何释放?
- 数据库一个字段 我定义成 float 类型 怎么 输入的小数后总给我保留出一长串小数
- 请教如何通过编译器输出的map文件调试release程序
- 请问如何读取SCSI硬盘的序列号?论坛似乎没以前纯净了!
- 调用了addnew()函数怎么会把第一条记录覆盖了呢?
- VC中怎么对时间进行比较?
int CalculateMD5(CString FileName, CString &MD5)
{
const size_t StringSize = FileName.GetLength() + 1;
size_t CharactersConverted = 0; char *file = new char[StringSize];
//char file[1024];
//file=FileName.GetBuffer(FileName.GetLength()); wcstombs_s(&CharactersConverted, file,FileName.GetLength()+1, FileName, _TRUNCATE); int i, j;
FILE *fInput;
MD5Context md5Hash;
unsigned char bBuffer[4096];
unsigned char b;
char c;
if(!CryptStartup())
{
MessageBoxW(0, L"Could not start crypto library",
L"MD5", MB_ICONERROR);
return 0;
}
fInput = fopen(file, "rb");
if(!fInput)
{
MessageBoxW(0, L"Failed to open - Invalid File",
L"MD5", MB_ICONERROR);
CryptCleanup();
return 0;
}
memset(&md5Hash, 0, sizeof(MD5Context));
MD5Init(&md5Hash);
while(!feof(fInput)){
unsigned int nCount = fread(bBuffer, sizeof(unsigned char),
4096, fInput);
MD5Update(&md5Hash, bBuffer, nCount);
}
MD5Final(&md5Hash);
fclose(fInput);
//printf("\nChecksum of '%s' is: ", argv[1]);
char *Value = new char[1024];int k = 0;
for(i = 0; i < 16; i++)
{
b = md5Hash.digest[i];
for(j = 4; j >= 0; j -= 4)
{
c = ((char)(b >> j) & 0x0F);
if(c < 10) c += '0';
else c = ('a' + (c - 10));
//printf("%c", c);
Value[k] = c;
k++;
}
}
Value[k] = '\0';
CryptCleanup();
//CString cString;
MD5 = CString(Value);
//MessageBox(cString);
delete file;
delete Value;
return 1;
}
原始代码....我代码能力很差请直接帮忙改下可用的3Q
int CalculateMD5(CString FileName, CString &MD5)
{
const size_t StringSize = FileName.GetLength() + 1;
size_t CharactersConverted = 0; int i, j;
FILE *fInput;
MD5Context md5Hash;
unsigned char bBuffer[4096];
unsigned char b;
char c;
if(!CryptStartup())
{
MessageBoxW(0, L"Could not start crypto library",
L"MD5", MB_ICONERROR);
return 0;
}
fInput = fopen(FileName.GetBuffer(), "rb");
if(!fInput)
{
MessageBoxW(0, L"Failed to open - Invalid File",
L"MD5", MB_ICONERROR);
CryptCleanup();
return 0;
}
memset(&md5Hash, 0, sizeof(MD5Context));
MD5Init(&md5Hash);
while(!feof(fInput)){
unsigned int nCount = fread(bBuffer, sizeof(unsigned char),
4096, fInput);
MD5Update(&md5Hash, bBuffer, nCount);
}
MD5Final(&md5Hash);
fclose(fInput);
//printf("\nChecksum of '%s' is: ", argv[1]);
char *Value = new char[1024];int k = 0;
for(i = 0; i < 16; i++)
{
b = md5Hash.digest[i];
for(j = 4; j >= 0; j -= 4)
{
c = ((char)(b >> j) & 0x0F);
if(c < 10) c += '0';
else c = ('a' + (c - 10));
//printf("%c", c);
Value[k] = c;
k++;
}
}
Value[k] = '\0';
CryptCleanup();
//CString cString;
MD5 = CString(Value);
//MessageBox(cString);
delete Value;
return 1;
}
fopen(FileName.GetBuffer()这样就行....晕晕晕..
谢谢楼上的...