Winapi 如何使用Win32 API使用WriteFile指定要将文件写入的目录?

Winapi 如何使用Win32 API使用WriteFile指定要将文件写入的目录?,winapi,bitmap,writefile,Winapi,Bitmap,Writefile,我使用以下方法获取文件的句柄: char *filePathAndName = "C:\Projects\pic.bmp"; HANDLE hFile = CreateFile(_T(filePathAndName),GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 我使用了以下方法来编写该文件: WriteFile(hFile, (LPSTR)&bmfHeader, sizeof(BITMAPF

我使用以下方法获取文件的句柄:

char *filePathAndName = "C:\Projects\pic.bmp";
HANDLE hFile = CreateFile(_T(filePathAndName),GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
我使用了以下方法来编写该文件:

WriteFile(hFile, (LPSTR)&bmfHeader, sizeof(BITMAPFILEHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, (LPSTR)&bi, sizeof(BITMAPINFOHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, (LPSTR)lpbitmap, dwBmpSize, &dwBytesWritten, NULL);
但是,该文件会写入项目目录(即Microsoft Visual Studio解决方案文件所在的目录),而不是C:\Projects\目录

如何将.bmp文件写入指定目录?

这是您的问题:

char *filePathAndName = "C:\Projects\pic.bmp";
字符串或字符文字中的反斜杠表示特殊字符。例如,
\t
用于制表符或
\n
用于换行符。编译器应该抱怨
\P
\P
无效

如果字符串包含真正的反斜杠,则需要将其加倍:

char *filePathAndName = "C:\\Projects\\pic.bmp";
\u T()
宏只能与文字一起使用(与
TEXT()
宏相同)。你不能逃避文字中的斜杠

C运行时使用
\u T()
宏。Win32 API使用
TEXT()
宏。你不应该把它们混在一起,即使它们能有效地做同样的事情。为您正在使用的API使用正确的宏

调用
WriteFile()
时,不需要将强制转换数据键入
LPSTR

改用这个:

LPTSTR filePathAndName = TEXT("C:\\Projects\\pic.bmp");
HANDLE hFile = CreateFile(filePathAndName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
...
WriteFile(hFile, &bmfHeader, sizeof(BITMAPFILEHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, &bi, sizeof(BITMAPINFOHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, lpbitmap, dwBmpSize, &dwBytesWritten, NULL);

话虽如此,通常您应该用或提示用户输入输出文件名。或者,如果您想使用自己的文件名,至少使用(或,也支持选择文件夹)提示输入目标文件夹。

您应该停止使用TCHAR。如果您需要在98中支持NT和WO,这是有意义的。那些日子一去不复返了。而且你对LPSTR的投射是假的。谢谢!你回答了我的问题并提供了其他有用的信息。