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的投射是假的。谢谢!你回答了我的问题并提供了其他有用的信息。