我正在尝试查看文件名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;
}