哪位大神能帮小弟我把以下代码在UNICODE环境下编译通过
哪位大神能帮我把以下代码在UNICODE环境下编译通过?
------解决思路----------------------
簡單的修改辦法是將 _open 修改為 _topen,如果有問題,需要包含 <tchar.h>。這樣的話寫入的文件也將是 Unicode 編碼了。
------解决思路----------------------
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);
}
------解决思路----------------------
簡單的修改辦法是將 _open 修改為 _topen,如果有問題,需要包含 <tchar.h>。這樣的話寫入的文件也將是 Unicode 編碼了。
------解决思路----------------------
#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);
}