如何使用Windows API创建文件?

3
我想使用Windows API创建一个文本文件。我学习了相关的技术知识。
HANDLE CreateFile(
LPCTSTR lpFileName, 
DWORD dwDesiredAccess, 
DWORD dwShareMode, 
LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
DWORD dwCreationDispostion , 
DWORD dwFlagsAndAttributes, 
HANDLE hTemplateFile); 

我不明白如何传递第一个参数以创建文件。我尝试使用数据类型FILE并将其指针作为第一个参数传递,但它显示与LPCTSTR不兼容。有人能告诉我该怎么做吗?我是在使用Windows API方面的新手。谢谢。

3个回答

9

LPCTSTRconst TCHAR*(“长指向常量TCHAR字符串”)相同,它可以是const wchar_t*const char*,具体取决于字符集。因此,只需传入由_T()包围的字符串即可:

CreateFile(_T("C:\\File.txt"), FILE_READ_DATA, FILE_SHARE_READ,
    NULL, OPEN_ALWAYS, 0, NULL);

(顺便提一下,FILE不是Windows SDK的一部分;它是标准C运行时库的一部分,它在内部基于CreateFile,后者根据名称创建一个文件。)

请问 _T 的头文件名是什么?我已经包含了 <windows.h> 和 <stdio.h>,但它显示 _T 未定义。 - narayanpatra
谢谢伙计,搞定了。我太懒了。感谢你的帮助。 - narayanpatra
当然,没问题。有趣的事实是,TEXT()宏执行相同的操作,但它只是在不同的头文件中定义...如果你想的话,可以随意使用它。 :) - user541686
1
@narayanpatra:你检查了CreateFile的返回值吗?如果它返回了NULLINVALID_HANDLE_VALUE,你应该调用GetLastError来找出原因。你有写入目录的权限吗?使用Win32 API并不能绕过权限检查。 - Ben Voigt
抱歉给您带来不便。错误出在其他地方。现在已经正常工作了。感谢您的帮助。 - narayanpatra
显示剩余2条评论

4

传递文件的名称,它是一个字符串。使用SDK的示例代码


在这个例子中,文件名是通过命令行传递的。我想在我的代码中硬编码它。 - narayanpatra

2
使用CreateFile()函数创建文件的步骤如下:
CreateFile("OUTPUT_FILE", GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

第一个参数是文件名,可以从任何字符串变量中传递。例如,如果文件名在CString变量中,您可以传递(LPCTSTR)variblename将其转换为LPCTSTR。所有其他参数取决于您的实现,无论您是否希望始终创建文件或附加到现有文件等...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接