如何附加 wstring 并将其写入文件
How to Append wstring and write it to a file
我一直在尝试 1 小时来寻找解决方案,但没有任何效果。我正在使用FindFirstFile函数来获取文件/文件夹的列表。这部分工作正常,但是当我尝试使用它的cFilename时,它给出了一个字符串,几乎无用。我试图将其转换为字符以写入文件,它给了我错误。我试图将 wstring 写入文件,它搞砸了并写入了第一个文件系统对象,后跟许多空值。这真的让我感到沮丧,我真的很想得到帮助。我的代码:
{
//wstring writedata = search_data.cFileName + "n"; //cant append newline to it
//printf(search_data.cFileName); //works
//wstring newline = "n"; //Cant create newline in wstring
//fwrite(writedata, 1, sizeof(writedata), directorycontents); //writedata I cant set it
//fwrite(search_data.cFileName, 1, sizeof(search_data.cFileName), directorycontents); //writes first fileobject and a lot of nulls, fail
if(FindNextFile(handle, &search_data) == FALSE){
break;}
}
如果有人能告诉我如何将 wstring 转换为 char[],我将不胜感激。我也不知道该怎么做,这是我尝试的第一件事。
#include <windows.h>
#include <stdio.h>
#include <string>
using namespace std;
int main(int argc, char* argv[]){WIN32_FIND_DATA search_data;
memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
HANDLE handle = FindFirstFile("c:\*", &search_data);
FILE *directorycontents = fopen("C:\testwrite.txt", "w+");
while(handle != INVALID_HANDLE_VALUE)
{
wstring newline = L"n"; //Cant create newline in wstring
search_data.cFileName += newline;
string test = cstr(search_data.cFileName);
search_data.cFileName += newline;
fwrite(search_data.cFileName, 1, sizeof(search_data.cFileName), directorycontents);
if(FindNextFile(handle, &search_data) == FALSE){
break;}
}}
修复
// enable / disable both of them to enable/disable unicode
//#define UNICODE
//#define _UNICODE
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
int main(int argc, char* argv[]){
WIN32_FIND_DATA search_data;
memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
HANDLE handle = FindFirstFile(TEXT("c:\*"), &search_data);
FILE *directorycontents = fopen("C:\testwrite.txt", "wb");
while(handle != INVALID_HANDLE_VALUE)
{
fwrite(search_data.cFileName, 1, _tcslen(search_data.cFileName) * sizeof(TCHAR), directorycontents);
_fputts(TEXT("rn"), directorycontents);
if(FindNextFile(handle, &search_data) == FALSE)
break;
}
}
其他问题
search_data.cFileName += newline;
此行有问题,因为cFileName
的类型是TCHAR[]
(TCHAR 数组(,而newline
的类型是wstring
。这些类型不兼容。
不能使用 +=
运算符追加到固定大小的数组。
cstr(search_data.cFileName)
这没有任何意义。函数 cstr 只能用于string
对象的类型。
了解有关以 null 结尾的字符串的详细信息
http://en.wikipedia.org/wiki/Null-terminated_string
cFileName
是以 null 结尾的字符串。例如,当 TCHAR char
(未定义_UNICODE(时,字符串"Hello"在内存中如下所示:
['H','e','l','l','o', ' ', ...]
在这里,每个元素占用一个字节,...
可以是任何垃圾。 cFileName
始终具有 260 个元素的容量,但这并不意味着 cFileName 中字符串的长度为 260 个。实际上,cFileName 中字符串的最大长度是 259,因为您始终必须有一个终止的 '\0' 元素。
了解有关 TCHAR 的更多信息
http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc
TCHAR cFileName[MAX_PATH]; //this is how cFileName is defined
sizeof(TCHAR) == 2 // when _UNICODE is defined
sizeof(TCHAR) == 1 // when _UNICODE is defined
- 定义
_UNICODE
时TCHAR
wchar_t
(2 个字节( - 未定义
_UNICODE
时,TCHAR
char
(1 字节(。 -
MAX_PATH
定义为260
- 因此,调用 sizeof(cFileName( 将给你 260(当未定义_UNICODE时(或 520(当定义_UNICODE时(
要获取由 TCHAR 组成的字符串的长度,您必须使用 _tcslen
宏。此宏扩展到strlen
或wcslen
,具体取决于定义的_UNICODE
。
您必须知道数组大小为 260 cFileName
并不意味着字符串具有相同的长度。 cFileName
存储一个 C 样式的字符串(无论_UNICODE如何(,这意味着它以数组中的零元素终止。
如果要避免使用 unicode,请确保在包含 windows.h
之前未定义_UNICODE
。您也可以通过将字符集设置为"未设置"来实现此目的,如本文所示。
TCHAR 已被用于简化编译同一程序的 unicode 和非 unicode 版本,只需切换定义即可。
wchar_t
和char
字符串之间的转换:http://msdn.microsoft.com/en-us/library/5d7tc9zw.aspx
了解有关各种字符串类型的更多信息
http://www.codeproject.com/Articles/2995/The-Complete-Guide-to-C-Strings-Part-I-Win32-Charahttp://www.codeproject.com/Articles/3004/The-Complete-Guide-to-C-Strings-Part-II-String-Wra
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 用户输入字符串的文件附加问题..C++
- 使用 Poco::Zip 将文件附加到现有 zip 文件
- 如何将 json 数据附加到 Qt 中的现有 json 文件中
- 如何在C++中附加到文件?
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 如何在 c++ 中打开文件,而不擦除其内容而不附加它?
- 在gcc上附加带有资源的二进制文件
- 为什么将追加'.o'附加到头文件末尾是先决条件?
- 如何在二进制文件上附加数据?
- C++如何附加ifstream以将多个文件读取为一个大文件
- 如何在 c c ++ 混合生成文件中为 c 对象添加附加规则?
- 如何从文件中读取并将其附加到C 中另一个文件的末尾
- 如何使用ofstream打开文件,以便其他用户可以附加/写入同一文件
- 将 14 GB 数据附加到 EXE 文件的末尾
- 将行附加到Armadillo .mat文件
- 如何在二进制文件中附加二进制文件C++
- C /以特定方式在TXT文件上附加数据
- 当尝试读取C++中的文件时,我的文件会附加一个奇怪的字符序列
- 在文本文件中间附加字符串