Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!

    2. News

    1. Red Dead Redemption 2

      1. News
      2. Red Dead Online
      3. The Armadillo Inn
    1. GTA Online

      1. After Hours
      2. Find Lobbies & Players
      3. Guides & Strategies
      4. Vehicles
      5. Content Creator
      6. Help & Support
    2. Crews

      1. Events
      2. Recruitment
    1. Grand Theft Auto Series

    2. GTA Next

    3. GTA V

      1. PC
      2. Guides & Strategies
      3. Help & Support
    4. GTA IV

      1. Episodes from Liberty City
      2. Multiplayer
      3. Guides & Strategies
      4. Help & Support
      5. GTA Mods
    5. GTA Chinatown Wars

    6. GTA Vice City Stories

    7. GTA Liberty City Stories

    8. GTA San Andreas

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    9. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    10. GTA III

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    11. Top Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    12. Wiki

      1. Merchandising
    1. GTA Modding

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    3. Featured Mods

      1. DYOM
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Red Dead Redemption

    2. Rockstar Games

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Programming
      5. Movies & TV
      6. Music
      7. Sports
      8. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Forum Support

    2. Site Suggestions

Sign in to follow this  
Grinch_

Whats wrong here

Recommended Posts

Grinch_
Posted (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 by Inan-Ahammad

Share this post


Link to post
Share on other sites
Parik
Posted (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 by Parik

Share this post


Link to post
Share on other sites
Grinch_
Posted (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.Capture.PNG?width=359&height=24

Edited by Inan-Ahammad

Share this post


Link to post
Share on other sites
DK22Pac
Posted (edited)

If you fine with C++17, you can use std::filesystem.

 

#include <filesystem>using fs = std::filesystem; // std::experimental::filesystem on MSVC compiler// ...if (fs::exists("myfile.txt")) { // note: it may throw an exception    // ...}
Edited by DK22Pac

Share this post


Link to post
Share on other sites
Grinch_

Solved the problem few days ago but anyway thanks for helping.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • 1 User Currently Viewing
    0 Members, 0 Anonymous, 1 Guest

×

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.