错误:与"运算符<<"不匹配(操作数类型为"std::ifstream" {aka 'std::basic_ifstream'} 和 'CHAR [39]' <char>



我正在尝试查看文件名hardware id txt是否存在,如果不存在,则创建它并将硬件id写入其中,但我一直收到这个错误,声称操作员没有什么问题。

#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
HW_PROFILE_INFO hwProfileInfo; // unless we have a very good reason, this should
// not be global
if(GetCurrentHwProfile(&hwProfileInfo) != NULL)
{ // update info was a success. NOW we have a GUID and can do stuff with
// hwProfileInfo
printf("Hardware GUID: %sn",     hwProfileInfo.szHwProfileGuid);
printf("Hardware Profile: %sn", hwProfileInfo.szHwProfileName);
std::ifstream hwidfile;
hwidfile.open("hardwareid2.txt");
if(hwidfile) {
printf("File exist");
return 0;
} else{
std::ofstream hwidfile { "hardwareid2.txt" };
}
if (!(hwidfile << hwProfileInfo.szHwProfileGuid))
{ // will fail if can't write for any reason, like file didn't open
std::cout << "File write failedn";
return -1;
}

}
else
{
std::cout << "GetCurrentHwProfile failedn";
return -1;
}
getchar();
}

您正在声明两个独立的变量,一个是std::ifstream,一个std::ofstream,名称相同hwidfile。这对你来说是行不通的。您正在一个嵌套作用域中声明ofstream,该作用域在您尝试写入ofstream之前破坏了它。您不能通过用不同类型重新声明相同的名称来更改变量的类型。

您实际上是在ifstream上调用operator<<,而不是在ofstream上调用,因此会出现编译器错误。此时ofstream已超出范围。

如果您需要一个既可用于输入又可用于输出的文件流,请使用单个std::fstream变量,例如:

std::fstream hwidfile;
hwidfile.open("hardwareid2.txt", std::ios_base::in);
if (hwidfile.is_open()) {
std::cout << "File existsn";
return 0;
}
hwidfile.open("hardwareid2.txt", std::ios_base::out);
if (!hwidfile.is_open()) {
std::cout << "File create failedn";
return 0;
}
if (!(hwidfile << hwProfileInfo.szHwProfileGuid))
{
std::cout << "File write failedn";
return -1;
}

否则,给每个文件流变量不同的名称,例如:

std::ifstream hwidfileIn("hardwareid2.txt");
if (hwidfileIn.is_open()) {
std::cout << "File existsn";
return 0;
}
std::ofstream hwidfileOut("hardwareid2.txt");
if (!hwidfileOut.is_open()) {
std::cout << "File create failedn";
return 0;
}
if (!(hwidfileOut << hwProfileInfo.szHwProfileGuid))
{
std::cout << "File write failedn";
return -1;
}

或者,简单地去掉ifstream,使用std::filesystem::exists()或等效物,例如:

if (std::filesystem::exists("hardwareid2.txt")) {
std::cout << "File existsn";
return 0;
}
std::ofstream hwidfile("hardwareid2.txt");
if (!hwidfileOut.is_open()) {
std::cout << "File create failedn";
return 0;
}
if (!(hwidfile << hwProfileInfo.szHwProfileGuid))
{
std::cout << "File write failedn";
return -1;
}

相关内容

  • 没有找到相关文章

最新更新