无法使用 C++ 中的 class 成员函数 create/write 到文件
Unable to create/write to a file using class member function in c++
这是MedClass.cpp:-
#include "MedClass.h"
std::string Medicine::getFileName()
{
return file_name;
}
std::string Medicine::getMedicineName()
{
return med_name;
}
std::string Medicine::getMedicineFormula()
{
return med_formula;
}
void Medicine::displayMedInfo()
{
std::cout << "Details of selected medicine : \n\n";
std::cout << "Medicine name :- " << med_name << std::endl;
std::cout << "Medicine formula :- " << med_formula << std::endl;
std::cout << "Medicine weight :- " << med_weight << std::endl;
std::cout << "Medicine Price :- " << med_price << std::endl;
std::cout << "Medicine Expiry Date :- " << expiry_date << std::endl;
std::cout << "Meicine Comapny :- " << med_company << std::endl;
}
int Medicine::getMedUnitsLeft()
{
return med_units_left;
}
void Medicine::writeToFile()
{
medicine_file.open(file_name);
std::cout << "Enter details of medicine in following format :- \n";
std::cout << "Name Formula Weight Price Company Expiry\n";
getline(std::cin, file_input);
medicine_file << file_input;
medicine_file.close();
std::cout<<"File input validated : \n";
}
void Medicine::getFromFile()
{
medicine_file.open(file_name);
medicine_file >>
med_name>>med_formula>>med_weight>>med_price>>med_company>>expiry_date;
medicine_file.close();
}
void Medicine::createFile()
{
medicine_file.open(file_name);
if (!medicine_file.is_open())
std::cout << "file is not opening\n";
medicine_file.close();
}
void Medicine::setFileName(std::string &recieved)
{
file_name = recieved;
}
这是MedClass.h :-
#pragma once
#include <string>
#include <iostream>
#include <fstream>
#include <limits>
class Medicine
{
public :
std::string getFileName();
std::string getMedicineName();
std::string getMedicineFormula();
void displayMedInfo();
int getMedUnitsLeft();
void writeToFile();
void getFromFile();
void createFile();
void setFileName(std::string &recieved);
private:
std::fstream medicine_file;
std::string file_name;
std::string file_input;
std::string med_name;
std::string med_formula;
std::string expiry_date;
std::string med_company;
float med_weight;
float med_price;
int med_units_left;
};
现在,如果我以这种方式在 main.cpp 中实现它:-
void ViewMedicine()
{
Medicine med;
std::string medicine_name;
std::string medicine_filename;
std::cout << "Enter medicine name to view : \n";
getline(std::cin, medicine_name);
medicine_filename = "Medicines\" + medicine_name + ".txt";
std::ifstream check_med_by_name;
check_med_by_name.open(medicine_filename);
if (!check_med_by_name.is_open())
{
std::cout << "Medicine not found\n";
}
else
{
med.setFileName(medicine_filename);
med.getFromFile();
med.displayMedInfo();
check_med_by_name.close();
}
}
int main()
{
std::string medicine_name;
std::string medicine_filename;
Medicine medic;
std::cout<<"View Existing Medicines \n";
ViewMedicines();
std::cout<<"Enter the name of medicine to add : \n";
getline(std::cin,medicine_name);
medicine_filename = "Medicines\" + medicine_name + ".txt";
medic.setFileName(medicine_filename);
medic.createFile();
medic.writeToFile();
return 0;
}
这里如果程序运行正确,它应该在 medicines 文件夹中创建一个文件,并且不应该在 output.But 中显示 "file not opening" 我得到 "file is not opening" 作为程序 output.this 显示文件未获取 created.Even 手动创建药品文件夹无济于事。
但我可以在 medicine 文件夹中查看现有的名为 med 的手动创建的 medicine 文件。
程序输出是这样的:-
View existing medicines
Enter medicine name to view :
med
Details of selected medicine :
Medicine name :- name
Medicine formula :- formula
Medicine weight :- 50
Medicine Price :- 100
Medicine Expire Date :- 10/04/21
Medicine Company :- company
Enter the name of medicine to add :
new
file is not opening
Enter details of medicine in following format :-
Name Formula Weight Price Company Expiry
new new 50 100 new 0
file input validated
press any key to continue...
那么,为什么我可以查看现有的药物文件,但不能使用成员函数 CreateFile() 创建一个新文件?我应该怎么做才能创建一个包含所有详细信息的新药物文件,以便我可以访问稍后。
1) 默认fstream
模式不会创建新文件。
`std::fstream medicine_filename;
...
medicine_file.open()'
open() 不会创建新文件,因为默认模式是 in | out
。要先创建一个文件,您只需要指定 out
模式。
2) medicine_filename = "Medicines\" + medicine_name + ".txt";
检查 'Medicines' 目录是否存在。要测试,请尝试使用驱动器形成完整路径,例如 "C:\Temp\test.txt".
好的,看来我解决了 it.If 我对 createFile() 函数添加了一个小改动,程序运行完美。
void Medicine::createFile()
{
std::ofstream medicine_file(file_name);
if (!medicine_file.is_open())
std::cout << "file is not opening\n";
medicine_file.close();
}
我将第一行从 "medicine_file.open(file_name)" 更改为 "std::ofstream medicine_file(file_name)",它按预期运行。
这是MedClass.cpp:-
#include "MedClass.h"
std::string Medicine::getFileName()
{
return file_name;
}
std::string Medicine::getMedicineName()
{
return med_name;
}
std::string Medicine::getMedicineFormula()
{
return med_formula;
}
void Medicine::displayMedInfo()
{
std::cout << "Details of selected medicine : \n\n";
std::cout << "Medicine name :- " << med_name << std::endl;
std::cout << "Medicine formula :- " << med_formula << std::endl;
std::cout << "Medicine weight :- " << med_weight << std::endl;
std::cout << "Medicine Price :- " << med_price << std::endl;
std::cout << "Medicine Expiry Date :- " << expiry_date << std::endl;
std::cout << "Meicine Comapny :- " << med_company << std::endl;
}
int Medicine::getMedUnitsLeft()
{
return med_units_left;
}
void Medicine::writeToFile()
{
medicine_file.open(file_name);
std::cout << "Enter details of medicine in following format :- \n";
std::cout << "Name Formula Weight Price Company Expiry\n";
getline(std::cin, file_input);
medicine_file << file_input;
medicine_file.close();
std::cout<<"File input validated : \n";
}
void Medicine::getFromFile()
{
medicine_file.open(file_name);
medicine_file >>
med_name>>med_formula>>med_weight>>med_price>>med_company>>expiry_date;
medicine_file.close();
}
void Medicine::createFile()
{
medicine_file.open(file_name);
if (!medicine_file.is_open())
std::cout << "file is not opening\n";
medicine_file.close();
}
void Medicine::setFileName(std::string &recieved)
{
file_name = recieved;
}
这是MedClass.h :-
#pragma once
#include <string>
#include <iostream>
#include <fstream>
#include <limits>
class Medicine
{
public :
std::string getFileName();
std::string getMedicineName();
std::string getMedicineFormula();
void displayMedInfo();
int getMedUnitsLeft();
void writeToFile();
void getFromFile();
void createFile();
void setFileName(std::string &recieved);
private:
std::fstream medicine_file;
std::string file_name;
std::string file_input;
std::string med_name;
std::string med_formula;
std::string expiry_date;
std::string med_company;
float med_weight;
float med_price;
int med_units_left;
};
现在,如果我以这种方式在 main.cpp 中实现它:-
void ViewMedicine()
{
Medicine med;
std::string medicine_name;
std::string medicine_filename;
std::cout << "Enter medicine name to view : \n";
getline(std::cin, medicine_name);
medicine_filename = "Medicines\" + medicine_name + ".txt";
std::ifstream check_med_by_name;
check_med_by_name.open(medicine_filename);
if (!check_med_by_name.is_open())
{
std::cout << "Medicine not found\n";
}
else
{
med.setFileName(medicine_filename);
med.getFromFile();
med.displayMedInfo();
check_med_by_name.close();
}
}
int main()
{
std::string medicine_name;
std::string medicine_filename;
Medicine medic;
std::cout<<"View Existing Medicines \n";
ViewMedicines();
std::cout<<"Enter the name of medicine to add : \n";
getline(std::cin,medicine_name);
medicine_filename = "Medicines\" + medicine_name + ".txt";
medic.setFileName(medicine_filename);
medic.createFile();
medic.writeToFile();
return 0;
}
这里如果程序运行正确,它应该在 medicines 文件夹中创建一个文件,并且不应该在 output.But 中显示 "file not opening" 我得到 "file is not opening" 作为程序 output.this 显示文件未获取 created.Even 手动创建药品文件夹无济于事。
但我可以在 medicine 文件夹中查看现有的名为 med 的手动创建的 medicine 文件。
程序输出是这样的:-
View existing medicines
Enter medicine name to view :
med
Details of selected medicine :
Medicine name :- name
Medicine formula :- formula
Medicine weight :- 50
Medicine Price :- 100
Medicine Expire Date :- 10/04/21
Medicine Company :- company
Enter the name of medicine to add :
new
file is not opening
Enter details of medicine in following format :-
Name Formula Weight Price Company Expiry
new new 50 100 new 0
file input validated
press any key to continue...
那么,为什么我可以查看现有的药物文件,但不能使用成员函数 CreateFile() 创建一个新文件?我应该怎么做才能创建一个包含所有详细信息的新药物文件,以便我可以访问稍后。
1) 默认fstream
模式不会创建新文件。
`std::fstream medicine_filename;
...
medicine_file.open()'
open() 不会创建新文件,因为默认模式是 in | out
。要先创建一个文件,您只需要指定 out
模式。
2) medicine_filename = "Medicines\" + medicine_name + ".txt";
检查 'Medicines' 目录是否存在。要测试,请尝试使用驱动器形成完整路径,例如 "C:\Temp\test.txt".
好的,看来我解决了 it.If 我对 createFile() 函数添加了一个小改动,程序运行完美。
void Medicine::createFile()
{
std::ofstream medicine_file(file_name);
if (!medicine_file.is_open())
std::cout << "file is not opening\n";
medicine_file.close();
}
我将第一行从 "medicine_file.open(file_name)" 更改为 "std::ofstream medicine_file(file_name)",它按预期运行。