Grinch_ 591 Posted March 21, 2018 Share Posted March 21, 2018 (edited) I was working on a function which isnt compiling here is the code(c++) void file_exist(fstream& file,string name){ if(!file.open(name)) { file.open(name, ios::out); file_ccheck(file,name); }else { file_ocheck(file,name); }} I am using cb with c++17 strandrad.i also tried using c.str() after the string(name) but still isnt working. getting error at this line if(!file.open(name)); Edited March 21, 2018 by Inan-Ahammad Link to post Share on other sites
Parik 4,153 Posted March 21, 2018 Share Posted March 21, 2018 (edited) fstream::open does not return a bool. You cannot use it with if statement. You can use fstream::good function instead. fstream::open requires a const char* as the first argument, you cannot pass a string. I dont understand what you are trying to do here.Opening a file again if it failed? That will most likely fail too. The function name is misleading. Try to use better function names in the future,i expect file_exist to return a boolean , about wheather the file exists or not. file_ccheck and file_ocheck , its impossible to know what these functions mean. maybe they mean that execute it on create (hence file_c*) , or execute on open (hence file_o*) either way really confusing. Also in the future, don't only specify which line has error , but maybe also what error it is If you want to check if a file exists: bool file_exists (const std::string& name) { ifstream f(name.c_str()); return f.good();} EDIT: I guess you want to open a file if it doesn't already exist. in that case bool file_exists (const std::string& name) { ifstream f(name.c_str()); return f.good();}void open_file(const std::string& name) { if(file_exists(name)) { //create file here } else { //do something here. }} Explanation 1. fstream is for both read/write. ofstream is only for write. ifstream is only for reading. The default second parameter for fstream::open, is ios_base::in | ios_base::out. Therefore, it will open the file for both reading and writing. So, it will create the file if it doesn't exist, and therefore not fail. You can either use fstream with only ios_base::in as the flags, or you can use ifstream. Later, after you have checked if the file exists, you can reopen it with the ios_base::out flag set, and create the file if it didnt , or continue if it did. Therefore the code has both logical and syntax errors. Edited March 21, 2018 by Parik RyanDri3957V 1 Link to post Share on other sites
Grinch_ 591 Posted March 22, 2018 Author Share Posted March 22, 2018 (edited) fstream::open does not return a bool. You cannot use it with if statement. You can use fstream::good function instead. fstream::open requires a const char* as the first argument, you cannot pass a string. I dont understand what you are trying to do here.Opening a file again if it failed? That will most likely fail too. The function name is misleading. Try to use better function names in the future,i expect file_exist to return a boolean , about wheather the file exists or not. file_ccheck and file_ocheck , its impossible to know what these functions mean. maybe they mean that execute it on create (hence file_c*) , or execute on open (hence file_o*) either way really confusing. Also in the future, don't only specify which line has error , but maybe also what error it is If you want to check if a file exists: bool file_exists (const std::string& name) { ifstream f(name.c_str()); return f.good();} EDIT: I guess you want to open a file if it doesn't already exist. in that case bool file_exists (const std::string& name) { ifstream f(name.c_str()); return f.good();}void open_file(const std::string& name) { if(file_exists(name)) { //create file here } else { //do something here. }} Explanation 1. fstream is for both read/write. ofstream is only for write. ifstream is only for reading. The default second parameter for fstream::open, is ios_base::in | ios_base::out. Therefore, it will open the file for both reading and writing. So, it will create the file if it doesn't exist, and therefore not fail. You can either use fstream with only ios_base::in as the flags, or you can use ifstream. Later, after you have checked if the file exists, you can reopen it with the ios_base::out flag set, and create the file if it didnt , or continue if it did. Therefore the code has both logical and syntax errors. thx bro after asking the question in 4-5 places,just got this answer.Will,test this when i get some time.Opss sry forgot to sent the screenshot of tyhe error here. Edited March 22, 2018 by Inan-Ahammad Link to post Share on other sites
DK22Pac 2,557 Posted March 27, 2018 Share Posted March 27, 2018 (edited) If you fine with C++17, you can use std::filesystem. #include <filesystem> using fs = std::filesystem; // ... if (fs::exists("myfile.txt")) { // note: it may throw an exception // ... } Edited November 11, 2018 by DK22Pac Link to post Share on other sites
Grinch_ 591 Posted March 27, 2018 Author Share Posted March 27, 2018 Solved the problem few days ago but anyway thanks for helping. Link to post Share on other sites