Possible to store data into text file permanently in c++ - c++

all I have a one small program in c++.I need to store some text in the .txt file it stored and file also created but again i run with some other data the previous data is deleted in .txt file, help anyone how to solve that problem i ask doubt is it possible in c++ yes/no.someone help!

The behavior you are describing is called overwriting a file.
You have two choices, if the file already exists:
Append to already existing file. Read more in How to append text to a text file in C++?
Write the data to a different file.

Related

How to read a data from excel file and store into variable?

I want to read a data from excel file and store into variable i also want to read index of excel file.I don't no how to do this.so please show the your example in c++ code.
Excel files are quite hard to read with C++. They are stored as a binary file and need to be properly read and interpreted by your code.
There are libraries out there to do this. Maybe check this post out

How do I delete bytes from a file in C or C++?

I've been Googling this for hours...reading and reading and reading, and yet nothing I come across seems to answer this simple question: In C or C++ programming: I have a file, it contains "hello world". I want to delete "world" (like pressing Backspace in a text editor), then save the file. How do I do this?
I know that files are streams (excellent info on that here!), which don't seem to have a way to delete items from a file per say, and I've studied all of the file-related functions in stdio.h: http://www.cplusplus.com/reference/cstdio/fopen/.
It seems to me that files and streams therefore are NOT like arrays: I can't just delete a byte from a file! Rather (I guess?) I have to create an entire new file and copy the whole original file into the new file withOUT the parts I want to delete? Is that the case?
The only other option I can think of is to seek to the position before "world", then write binary zeros to the end of the file, thereby overwriting "world". The problem with this, however, is a text editor will now no longer properly display this file, as it has non-printable characters in it--and the file size hasn't shrunk--it still contains these bytes--it's just that they hold zeros now instead of ASCII text, so this doesn't seem to be right either.
Related
Resizing a file in C++
You want std::filesystem::resize_file()
Assume your original file is "data.txt". As part of your code, open a new temp file say "data.txt.tmp" and start writing contents to it from original file. Upon writing data, replace the original file with the new one.
You can use a memory map from the source file and copy the data blocks you want to another memory map over target file. That's the easy and fast way (see http://man7.org/linux/man-pages/man2/mmap.2.html)

Going back to a previous line in a .txt file

I've already read numerous articles on how to read a specific line from a .txt file, but none of them do what I need. I'm creating a simple parser for a sort of "programming language" and I want to include a "label" system. The thing is, though, in order to go to a specific label, I may have to go back or forwards in the text file. How do I go to a specific line in the .txt file? Is there a way to do this so I can return to the original line afterwards? Thanx in advance.
The best you can try is random access of files to move to any position of file.
Refer to : http://www.learncpp.com/cpp-tutorial/137-random-file-io/

Reading specific elements from a CSV file in C++

I'm trying to create a reference program which I think will use an excel spreadsheet to hold information for reading only. I want the user to be able to select a topic from an option list and have the information in the appropriate cell be fed back to them. The program is being written in C++. My question is, how do I access specific cells from a spreadsheet from my program? I've researched it a little and I've seen that I want to save my file as a csv and use fscanf to read the contents, but I'm at a loss as to how I would do this part. I googled it and found this thread:
http://www.daniweb.com/software-development/cpp/threads/204808/parsing-a-csv-file-separated-by-semicolons
but I think it reads in all of the data from the CSV? From what I can tell anyways. And I only want to pull specific elements. Is that possible?
If you only want specific elements, you would still have to parse all contents of the file until you reach those elements. You don't have to store values you don't need, but you do need to parse them to advance in the file.
Are you invoking the program from Excel? If you are, a little VBA goes a long way. You could always only export the cells of interest ready for your C++ program to read in.
Otherwise, other answers are correct. However, you don't need to load the entire file into memory at once. You can use std::fstream to open the file and read in each line of the file, parsing in the required information for each line.

Adding Data at beginning of file [duplicate]

This question already has answers here:
Closed 11 years ago.
Possible Duplicate:
Delete a Line from a file in C Language
In C++, what is the proper way to insert a line at the beginning of a text file?
How can i add data at the beginning of a file using c/c++ programming?
I have tried following code :
fstream file;
stmt.open(L"d:\\xyz.txt",ios::in|ios::out|ios::app);
but this is appending at the end of file.
You cannot do that.
With only standard C or C++, if you want to do it atomically, you have to write everything to a new file (i.e. new data plus old file), and then move the file over. If you want to play it risky, you can read a block of data, and write the new content at the beginning and move the data up block by block (but if something interrupts you, you've destroyed the file).
If you have access to memory mapping, you can try a different approach: Memory-map the entire file, memmove it by the required offset, and memcpy the new data into the initial segment.
You could do this:
Create a new file
Add the new data at the top
Append the data from the old file
There's rename in cstdio but I'm sure there's also something C++-specific.
Your only options of opening a file as far as i know are read,write and append. Therefore you should read the entire file content (provided it's not a huge file), open a temp file for writing , then write what you want followed by the buffer you read from the old file.
You can also try to open the file in w+ mode and try to position the cursor at the beginning of the file but i don't know if that would work unfortunately