简体   繁体   中英

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;
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.

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";
  }
}

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
}

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM