平台环境:
WinXP SP2 + VC2005 + Intel Core Duo T2400 @ 1.83GHZ + 1.5GB Mem

测试函数:
1. Run-Time Library
FILE *fopen(
  const char *filename,
  const char *mode
);
int fclose(
  FILE *stream
);

2. Platform SDK
HANDLE CreateFile(
  LPCTSTR lpFileName,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,
  DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
);
BOOL CloseHandle(
  HANDLE hObject
);

3. Run-Time Library
FILE *tmpfile( void );
int fclose(
  FILE *stream
);

测试方法:
各执行1000,5000,10000次,包括文件打开和文件关闭。
时间使用ftime函数获取。

 

1000    AVG
fopen406407438417
CreateFile484407406432
tmpfile547500516521
     
5000    
fopen2453253124372473
CreateFile2109231321402187
tmpfile1828187518751859
     
10000    
fopen6672671967506713
CreateFile6281648464846416
tmpfile3859375037353781

可以看到tmpfile的效率很高,而且当执行fclose后,这个临时文件会自动被删除,比较适合那些暂时存在的文件。
如果没有fclose的话,直接使用_rmtmp()函数,就会删除当前temp文件夹下的所有由tmpfile创建的文件,但是tmpfile的个数是受限的,MSDN写着是取决与TMP_MAX = 32767,但是我实际测试中达到150左右就会被限制。
CreateFile返回的是Handle,适合用于Platform开发。
fopen比较傻瓜易用,但它已被废弃了,fopen_s是它的安全改进版。