#include <cstdlib>
#include <iostream>
#include <cwchar>
#include <windows.h>
#include <sys/stat.h>
#include <ctime>
using namespace std;
void hexdump ( void *ptr, size_t len ) {
unsigned char *mem = (unsigned char *)ptr;
size_t i;
for ( i = 0 ; i < len ; i++ ) {
printf( "%02x ", mem[i] );
if ( (i+1) % 8 == 0 ) printf( "\n" );
}
printf( "\n" );
}
int main(int argc, char *argv[])
{
wchar_t fn1[] = L"file\u0395\u03c7.txt";
char fn2[30] = { 0 };
int result = WideCharToMultiByte (
CP_UTF8,
0,
fn1,
sizeof(fn1)/sizeof(fn1[0]),
fn2,
100,
NULL,
NULL
);
printf( "Conversion returns %d\n", result );
hexdump ( fn1, sizeof fn1 );
hexdump ( fn2, sizeof fn2 );
FILE *fp = fopen( fn2, "w" );
if ( fp != NULL ) {
fprintf( fp, "hello world\n" );
fclose( fp );
struct stat sb = { 0 };
int sr = stat( fn2, &sb );
printf( "Stat returned %d\n", sr );
struct tm now = *localtime( &sb.st_mtime );
printf( "Mod Time=%s", asctime(&now) );
now = *localtime( &sb.st_atime );
printf( "Access Time=%s", asctime(&now) );
} else {
perror ( "Write failed\n" );
}
system("PAUSE");
return EXIT_SUCCESS;
}
My results
Conversion returns 13
66 00 69 00 6c 00 65 00
95 03 c7 03 2e 00 74 00
78 00 74 00 00 00
66 69 6c 65 ce 95 cf 87
2e 74 78 74 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00
Stat returned 0
Mod Time=Sat Aug 05 14:02:57 2006
Access Time=Sat Aug 05 14:02:57 2006
Press any key to continue . . .