几天来我一直在尝试解决这个问题,但我无法得到它。基本上我的代码应该读取由 wmic 生成的 .csv 文件并将其保存到结构中。我可以读取数据并且它正在被存储,但是数据在每个字符之后都有一个额外的空间。我曾尝试切换到函数的 Unicode 版本并使用宽字符串,但它们只会更加混乱数据(他们将“n”变成了“ÿ”)。
这是我认为是问题的代码:
system("wmic product get name,version,installdate,vendor /format:csv > product.txt");
std::ifstream infoFile("./program.txt"); // The file wmic wrote in csv format.
if(infoFile.is_open())
{
std::string line;
int lineNum = 0;
while(getline(infoFile, line))
{
lineNum++;
std::cout << "\nLine #" << lineNum << ":" << std::endl;
Program temp;
std::istringstream lineStream(line);
std::string cell;
int counter = 0;
int cellNum = 0;
while(getline(linestream, cell, ','))
{
cellNum++;
std::cout << "\nCell #" << cellNum << ":" << cell << std::endl;
switch(counter)
{
case 0:
break;
case 1:
temp.installDate = cell;
break;
case 2:
temp.name = cell;
break;
case 3:
temp.vendor = cell;
break;
case 4:
temp.version = cell;
break;
default:
std::cout << "GetProductInfo(): Invalid switch value: " << counter << std::endl;
break;
}
counter++;
}
information->push_back(temp); // Vector to save all of the programs.
}
infoFile.close();
}
else
{
std::cout << "GetProductInfo(): Failed to open the input file." << std::endl;
return 1;
}
return 0;
}
编辑: 好的,我正在尝试编写 BOM (FF FE 0D 00 0A),因为它以前没有被编写过。我正在用十六进制值编写一个 char 数组,但是添加了一个额外的 0x0D(FF FE 0D 00 0D 0A)。它还使用额外的空格保存内部变量。这可能不是问题,因为我可以修改我的代码来解决它,但这不是最佳的。有任何想法吗?
Edit2: 所以我想我不需要 BOM。我现在的主要问题是读取 UTF-16LE 文件并将数据保存到没有额外空格的结构中。我需要一些帮助以正确的方式进行操作,因为我想弄清楚将来如何防止这种情况发生。谢谢大家的帮助,这个bug很关键。