jack.li
jack.li

Reputation: 973

c++ get one line data in txt file

I want to read data from a txt file, but i am not able to get it. I am new to c++. Here is my code, but it does not work. I used getline(),

 ifstream inFile;
 string sPassWord;
 inFile.open("QdatPassWordconfig.config");
 inFile.seekg(0,ios::end);
 int length=inFile.tellg();

  if (inFile.is_open())
  {
      while (!inFile.eof())
      {
              getline(inFile,sPassWord);
               cout<<sPassWord<<endl;
      }

         cout<<"get data from txt file"<<endl;
         // here ,I cannot read data from file
         cout<<sPassWord<<endl;
  }

 if(!inFile.is_open() || length==0)
  {
      cout<<"file is create or write"<<endl;
      sPassWord="BdsWUjT26";
      ofstream outFile;
      outFile.open("QdatPassWordconfig.config");
      outFile<<sPassWord<<endl;
      outFile.close();
  }
   inFile.close();
  cout<<sPassWord<<endl;

Upvotes: 0

Views: 5023

Answers (4)

CLearner
CLearner

Reputation: 542

There are so many errors with your code, so I decided to show you how I would have done it (please do read the comments):

void Example( void )
{
    // DECLARATION
    bool bInputMode = true;
    std::fstream ioFile;
    ::UINT nFileSize = 0;
    std::string strPassword = "";

    // INITIALIZATION
    // *Open or create ioFile
    // ioFile can now do both input and output operations
    ioFile.open( "Passwords.pw",
                 std::fstream::in |std::fstream::out | std::fstream::app );

    // *Calculate/set the value of bInputMode
    // first, calculate the size of the file
    // if the size of the file is = 0,
    // bInputMode = false - which means to be in output mode
    ioFile.seekg( 0, std::ios::end );
    if( ( nFileSize = ioFile.tellg( ) ) = 0 )
        bInputMode = false;
    ioFile.seekg( 0, std::ios::beg );

    // DO WHATEVER
    // *Since bInputMode == true,
    // we shall read each line from ioFile by using std::getline
    if( bInputMode )
    {
    // *Get each line within ioFile and "copy" it to strPassword
    // and then print strPassword
    // *With std::getline, we could get the spaces
        while( std::getline( ioFile, strPassword ) )
            std::cout << strPassword << std::endl;
    }
    // *Since bInputMode == false,
    // we shall create a new from ioFile and then write to it
    else
    {
        std::cout << "Creating/writing a new file..." << std::endl;
        strPassword = "Password123";
        ioFile << strPassword << std::endl;
    }

    // CLEAN-UP
    // We are done with ioFile, close it.
    ioFile.close( );
};

Please point out any errors! Some feedback and suggestions would be great as well.

Upvotes: 0

Robᵩ
Robᵩ

Reputation: 168626

It isn't clear if you are trying to read the first line of the file, the last line of the file, or all the lines of the file. Here program snippets for each possibility:

To read the first line of the file:

// UNTESTED
{
  ifstream inFile("QdatPassWordconfig.config");
  string sPassWord;
  if(std::getline(inFile, sPassWord)) {
    std::cout << "Password is: " << sPassWord << "\n";
  } else {
    std::cout << "No password available.\n"
  }
}

To read all of the lines of the file:

// TESTED
#include <iostream>
#include <fstream>
#include <string>

int main ()
{
  std::ifstream inFile("QdatPassWordconfig.config");
  std::string sPassWord;
  while(std::getline(inFile, sPassWord)) {
    std::cout << "Password is: " << sPassWord << "\n";
  }
}

To read the last line of the file:

// UNTESTED
{
  ifstream inFile("QdatPassWordconfig.config");
  string sPassWord;
  int lineCount = 0;
  while(std::getline(inFile, sPassWord)) {
    lineCount++;
  }
  if(lineCount) {
    std::cout << "Password is: " << sPassWord << "\n";
  } else {
    std::cout << "No password available.\n";
  }
}

Upvotes: 2

CLearner
CLearner

Reputation: 542

Do something like this:

// Declare local variables
std::ifstream inFile;
std::string sPassword = "";
::UINT length = 0;

// Attempt to open file
inFile.open( "QdatPassWordconfig.config" );

// Use your if and else statement like this:
// Is inFile open?
if( inFile.is_open( ) )
{
    // Read file line by line using std::getline
    while( std::getline( inFile, sPassword ) ) {
        // Print sPassword
        std::cout << sPassword << std::endl;
    }
    // Done with inFile, close it
    inFile.close( );
}
else
{
    // Do whatever if inFile can't be open
}

Upvotes: 1

CLearner
CLearner

Reputation: 542

inFile.seekg(0,ios::end);
int length=inFile.tellg();

1.You forgot seek back to the beginning. Like this:

inFile.seekg(0,ios::end);
int length=inFile.tellg();
inFile.seekg(0,ios::beg);

2.You need to practice on your if and else statement.

3.Don't use std::ifstream::eof. Use std::getline.

Upvotes: 2

Related Questions