哪位大神能帮我把以下代码在UNICODE环境下编译通过?

路马 2015-05-10 09:32:53
void CMakeSD::WritePasscode()
{
int file_attr = FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM;



TCHAR lpVolumeNameBuffer[MAX_SIZE];
DWORD lpVolumeSerialNumber;
DWORD lpMaximumComponentLength;
DWORD lpFileSystemFlags;
TCHAR lpFileSystemNameBuffer[MAX_SIZE];
TCHAR serial[MAX_SIZE];
TCHAR buf[BLOCK_SIZE];


GetVolumeInformation(szDrive,
lpVolumeNameBuffer,
sizeof(lpVolumeNameBuffer),
&lpVolumeSerialNumber,
&lpMaximumComponentLength,
&lpFileSystemFlags,
lpFileSystemNameBuffer,
sizeof(lpFileSystemNameBuffer));

//printf("盘的卷标:%s\n ",lpVolumeNameBuffer); //显示卷标
//printf("硬盘系列号:%08x\n",lpVolumeSerialNumber);//8位十六进制显示系列号

_stprintf(serial,_T("%08x"),lpVolumeSerialNumber);

CString szSerial(serial);

CString szName=_T("passcode");
int fd;

if ((fd = _open(szName,_O_CREAT | _O_BINARY | _O_WRONLY,_S_IWRITE))==0)
{
return ;
}
srand( (unsigned)time( NULL ) );

for (int i=0;i<BLOCK_SIZE;i++)
{
buf[i]=(TCHAR)(rand()&0xff);
}

CString szTemp(szSerial);

szTemp.Delete(4,szTemp.GetLength()-4);

memcpy(buf+0x48,szTemp,4);

szTemp=szSerial;

szTemp.Delete(0,4);

memcpy(buf+0x4dd,szTemp,4);

_write(fd,buf,sizeof(buf));

_close(fd);

}

...全文
122 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2015-05-14
  • 打赏
  • 举报
回复

#include <fcntl.h>
#include <sys/stat.h>
#include <io.h>


#define		MAX_SIZE		(0x100)
#define		BLOCK_SIZE		(0x100)
#define		szDrive			_T( "C:\\" )
void WritePasscode()
{
    int file_attr = FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM;
 
     
     
    TCHAR lpVolumeNameBuffer[MAX_SIZE];
    DWORD lpVolumeSerialNumber;
    DWORD lpMaximumComponentLength;
    DWORD lpFileSystemFlags;
    TCHAR lpFileSystemNameBuffer[MAX_SIZE];
    TCHAR serial[MAX_SIZE];
    TCHAR buf[BLOCK_SIZE];
     
 
    GetVolumeInformation(szDrive,
            lpVolumeNameBuffer,
            sizeof(lpVolumeNameBuffer),
            &lpVolumeSerialNumber,
            &lpMaximumComponentLength,
            &lpFileSystemFlags,
            lpFileSystemNameBuffer,
            sizeof(lpFileSystemNameBuffer));
 
    //printf("盘的卷标:%s\n ",lpVolumeNameBuffer); //显示卷标
    //printf("硬盘系列号:%08x\n",lpVolumeSerialNumber);//8位十六进制显示系列号
 
    _stprintf(serial,_T("%08x"),lpVolumeSerialNumber);
 
    CString szSerial(serial);
 
    CString szName=_T("passcode");
    int fd;
 
    if ((fd = _topen(szName,_O_CREAT | _O_BINARY | _O_WRONLY,_S_IWRITE))==0)
    {
        return ;
    }
    srand( (unsigned)time( NULL ) );
 
    for (int i=0;i<BLOCK_SIZE;i++)
    {
        buf[i]=(TCHAR)(rand()&0xff);
    }
 
    CString szTemp(szSerial);
 
    szTemp.Delete(4,szTemp.GetLength()-4);
     
    memcpy(buf+0x48,szTemp,4);
 
    szTemp=szSerial;
 
    szTemp.Delete(0,4);
 
    memcpy(buf+0x4dd,szTemp,4);
 
    _write(fd,buf,sizeof(buf));
 
    _close(fd);
 
}
「已注销」 2015-05-11
  • 打赏
  • 举报
回复
簡單的修改辦法是將 _open 修改為 _topen,如果有問題,需要包含 <tchar.h>。這樣的話寫入的文件也將是 Unicode 編碼了。

16,505

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧