473,386 Members | 1,779 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

finish a file

how the program knows when a file is finsihed, mmm?

Nov 12 '06 #1
18 1757
"panig" <pp********************@yahoo.co.idwrote:
how the program knows when a file is finsihed, mmm?
When it is closed.

--
To send me email, put "sheltie" in the subject.
Nov 12 '06 #2
don't close it if processing isn't finished yet.
panig wrote:
how the program knows when a file is finsihed, mmm?
Nov 12 '06 #3
and then ?

Daniel T. wrote:
"panig" <pp********************@yahoo.co.idwrote:
how the program knows when a file is finsihed, mmm?

When it is closed.

--
To send me email, put "sheltie" in the subject.
Nov 12 '06 #4
panig wrote:
and then ?
What does your tutorial say about fstream? What examples does it show? Do
any of them have "eof" in them?

--
Phlip
http://www.greencheese.us/ZeekLand <-- NOT a blog!!!
Nov 13 '06 #5
"panig" <pp********************@yahoo.co.idwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
how the program knows when a file is finsihed, mmm?
while ( mystream >MyVar )
{
// process MyVar
}
mystream.close();

or
while (std::getline( mystream, mystring) )
{
// process mystring
}
mystream.close();
Nov 13 '06 #6
On Mon, 13 Nov 2006 08:10:15 -0800, "Jim Langston"
<ta*******@rocketmail.comwrote:
>"panig" wrote:
>how the program knows when a file is finsihed, mmm?

while ( mystream >MyVar )
{
// process MyVar
}
mystream.close();

or
while (std::getline( mystream, mystring) )
{
// process mystring
}
mystream.close();
After close() check the stream state. Otherwise you don't know "when a
file is finsihed".
Nov 13 '06 #7
"Roland Pibinger" <rp*****@yahoo.comwrote in message
news:45***************@news.utanet.at...
On Mon, 13 Nov 2006 08:10:15 -0800, "Jim Langston"
<ta*******@rocketmail.comwrote:
>>"panig" wrote:
>>how the program knows when a file is finsihed, mmm?

while ( mystream >MyVar )
{
// process MyVar
}
mystream.close();

or
while (std::getline( mystream, mystring) )
{
// process mystring
}
mystream.close();

After close() check the stream state. Otherwise you don't know "when a
file is finsihed".
Please explain this. After you call .close() don't we know that the file is
"finished"?
Nov 14 '06 #8
On Tue, 14 Nov 2006 04:35:11 -0800, "Jim Langston" wrote:
>"Roland Pibinger" wrote in message
>After close() check the stream state. Otherwise you don't know "when a
file is finsihed".

Please explain this. After you call .close() don't we know that the file is
"finished"?
But when .close() fails?
Nov 14 '06 #9
Roland Pibinger wrote:
On Tue, 14 Nov 2006 04:35:11 -0800, "Jim Langston" wrote:
>>"Roland Pibinger" wrote in message
>>After close() check the stream state. Otherwise you don't know "when a
file is finsihed".

Please explain this. After you call .close() don't we know that the file
is "finished"?

But when .close() fails?
Maybe, then you have an open but "finished" file. Could someone explain what
this "finished" term means. Is that an officially recognized state a file
can be in?
Best

Kai-Uwe Bux
Nov 14 '06 #10
Roland Pibinger wrote:
On Tue, 14 Nov 2006 04:35:11 -0800, "Jim Langston" wrote:
"Roland Pibinger" wrote in message
After close() check the stream state. Otherwise you don't know "when a
file is finsihed".
Please explain this. After you call .close() don't we know that the file is
"finished"?

But when .close() fails?
Can .close() fail? I think not.

Nov 15 '06 #11
Daniel T. wrote:
Roland Pibinger wrote:
>On Tue, 14 Nov 2006 04:35:11 -0800, "Jim Langston" wrote:
>"Roland Pibinger" wrote in message
After close() check the stream state. Otherwise you don't know "when a
file is finsihed".

Please explain this. After you call .close() don't we know that the
file is "finished"?

But when .close() fails?

Can .close() fail? I think not.
The standard seems to allow close to fail [27.8.1.3/6]:

basic_filebuf<charT,traits>* close();

Effects: If is_open() == false, returns a null pointer. If a put area
exists, calls overflow(EOF) to flush characters. If the last virtual
member function called on *this (between underflow, overflow, seekoff,
and seekpos) was overflow then calls a_codecvt.unshift (possibly several
times) to determine a termination sequence, inserts those characters and
calls overflow(EOF) again. Finally it closes the file (??as if?? by
calling std::fclose(file)). If any of the calls to overflow or
std::fclose fails then close fails.

Returns: this on success, a null pointer otherwise.

Postcondition: is_open() == false.
Best

Kai-Uwe Bux
Nov 15 '06 #12
Kai-Uwe Bux <jk********@gmx.netwrote:
Daniel T. wrote:
>Roland Pibinger wrote:
>>On Tue, 14 Nov 2006 04:35:11 -0800, "Jim Langston" wrote:
"Roland Pibinger" wrote in message
>>>>After close() check the stream state. Otherwise you don't know
"when a file is finsihed".

Please explain this. After you call .close() don't we know that
the file is "finished"?

But when .close() fails?

Can .close() fail? I think not.

The standard seems to allow close to fail [27.8.1.3/6]:

basic_filebuf<charT,traits>* close();

Effects: If is_open() == false, returns a null pointer. If a put area
exists, calls overflow(EOF) to flush characters. If the last virtual
member function called on *this (between underflow, overflow, seekoff,
and seekpos) was overflow then calls a_codecvt.unshift (possibly several
times) to determine a termination sequence, inserts those characters and

calls overflow(EOF) again. Finally it closes the file (??as if?? by
calling std::fclose(file)). If any of the calls to overflow or
std::fclose fails then close fails.

Returns: this on success, a null pointer otherwise.

Postcondition: is_open() == false.
So is_open() will subsequently and invariantly return false if close()
fails. Also, if close() returns a null pointer, that doesn't necessarily
mean that it failed (after all, it returns NULL if is_open() was false
on entry.

Quite a pickle. close() can "fail" but there is no way to know if it
actually did fail unless one first queries "is_open()". Also, if it does
fail, we are left with no options because despite that failure
"is_open()" will still equal false, and thus subsequent calls to close()
will continue to return NULL.

So what is the robust way to close a file?

if ( file.is_open() ) {
if ( file.close() == 0 ) {
// what do we do here? [A]
}
}

I guess in [A] above, we could try to re-open the file, if that failed
then the file object becomes useless and we are done with it, if it
succeeds, we can try to close it again. Then we are stuck alternating
between opening the file and closing it again until such time as either
open fails, or close succeeds. A rather non-deterministic problem, the
program could get locked in a infinite loop.
if ( file.is_open() ) {
while ( file.close == 0 ) {
file.open();
if ( ! file.is_open() ) {
break;
}
}
}

Something like that? :-(

--
To send me email, put "sheltie" in the subject.
Nov 15 '06 #13
On Wed, 15 Nov 2006 03:21:46 GMT, "Daniel T." wrote:
>So what is the robust way to close a file?

if ( file.is_open() ) {
if ( file.close() == 0 ) {
..close() returns void
// what do we do here? [A]
}
}
What about:

file.close();
if (file.fail()) { // or file.bad()
// error
}

Better avoid iostreams for real work.

Best wishes,
Roland Pibinger
Nov 15 '06 #14
Roland Pibinger wrote:
Better avoid iostreams for real work.
Sorry, what?
Nov 15 '06 #15
In article <45*************@news.utanet.at>,
rp*****@yahoo.com (Roland Pibinger) wrote:
On Wed, 15 Nov 2006 03:21:46 GMT, "Daniel T." wrote:
So what is the robust way to close a file?

if ( file.is_open() ) {
if ( file.close() == 0 ) {

.close() returns void
Kai-Uwe Bux quoted the standard saying that close() returns either
'this' or NULL.

So which is it?

--
To send me email, put "sheltie" in the subject.
Nov 15 '06 #16
Daniel T. wrote:
In article <45*************@news.utanet.at>,
rp*****@yahoo.com (Roland Pibinger) wrote:
>On Wed, 15 Nov 2006 03:21:46 GMT, "Daniel T." wrote:
>So what is the robust way to close a file?

if ( file.is_open() ) {
if ( file.close() == 0 ) {

.close() returns void

Kai-Uwe Bux quoted the standard saying that close() returns either
'this' or NULL.
I quoted the close() method for the underlying buffer. The file stream has a
close() method, which calls the close() for the underlying buffer
[27.8.1.13/4]:

void close();
Effects: Calls rdbuf()->close() and, if that function returns false, calls
setstate(failbit)(27.4.4.3) (which may throw ios_base::failure).

As you can see, this one returns void but sets the failbit if it fails.

So which is it?
For the one from your code, void. Sorry for the confusion.
Best

Kai-Uwe Bux
Nov 15 '06 #17
Kai-Uwe Bux <jk********@gmx.netwrote:
Daniel T. wrote:
rp*****@yahoo.com (Roland Pibinger) wrote:
On Wed, 15 Nov 2006 03:21:46 GMT, "Daniel T." wrote:
So what is the robust way to close a file?

if ( file.is_open() ) {
if ( file.close() == 0 ) {

.close() returns void
Kai-Uwe Bux quoted the standard saying that close() returns either
'this' or NULL.

I quoted the close() method for the underlying buffer. The file stream has a
close() method, which calls the close() for the underlying buffer
[27.8.1.13/4]:

void close();
Effects: Calls rdbuf()->close() and, if that function returns false, calls
setstate(failbit)(27.4.4.3) (which may throw ios_base::failure).

As you can see, this one returns void but sets the failbit if it fails.
But the function doesn't return a bool it returns a pointer or NULL. So
by "returns false" I can only assume that they mean "returns NULL".
Except that doesn't work either because close() returns NULL if the file
wasn't initially opened, thus NULL doesn't mean a failure to close in
that case. Or is my snippet above in the fstream's close() function and
it sets failbit if the file was both open and close returned NULL?

I'm still left wondering, what is one supposed to do with a file if
close fails?

--
To send me email, put "sheltie" in the subject.
Nov 15 '06 #18
"Daniel T." <da******@earthlink.netwrote in message
news:da****************************@news.west.eart hlink.net...
Kai-Uwe Bux <jk********@gmx.netwrote:
>Daniel T. wrote:
rp*****@yahoo.com (Roland Pibinger) wrote:

On Wed, 15 Nov 2006 03:21:46 GMT, "Daniel T." wrote:
So what is the robust way to close a file?

if ( file.is_open() ) {
if ( file.close() == 0 ) {

.close() returns void

Kai-Uwe Bux quoted the standard saying that close() returns either
'this' or NULL.

I quoted the close() method for the underlying buffer. The file stream
has a
close() method, which calls the close() for the underlying buffer
[27.8.1.13/4]:

void close();
Effects: Calls rdbuf()->close() and, if that function returns false,
calls
setstate(failbit)(27.4.4.3) (which may throw ios_base::failure).

As you can see, this one returns void but sets the failbit if it fails.

But the function doesn't return a bool it returns a pointer or NULL. So
by "returns false" I can only assume that they mean "returns NULL".
Except that doesn't work either because close() returns NULL if the file
wasn't initially opened, thus NULL doesn't mean a failure to close in
that case. Or is my snippet above in the fstream's close() function and
it sets failbit if the file was both open and close returned NULL?

I'm still left wondering, what is one supposed to do with a file if
close fails?
I would think the only reason close would fail is if the file wasn't open in
the first place. And if it wasn't opened in the first place, then it is
closed. Consider close may fail in ths case:

std::ifstream MyFile( "Test.txt" );
if ( MyFile.is_open() )
{
// blah blah
}
MyFile.close();

If it wasn't able to open MyFile (it didn't exist, whatever) I presume that
the .close() would fail, but realisitcally, who cares? I already did a test
to see if it was open and if I needed something specific to do if it wasn't
found then I would have had an else. In practice it probably makes more
sense to put the .close() inside the if block, but I tend to put it outside
the block just like that, so I know when I'm done with a file without
looking inside blocks.

What does the standard say about the close() method itself, under what
conditions is it allowed to fail?
Nov 15 '06 #19

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Boris Nikolaevich | last post by:
This is backwards of what I usually want--normally if you have a long-running ASP script, it's a good idea to check to see whether the client is still connected so you can cancel execution. ...
39
by: jabailo | last post by:
I am looping through a text file, and with each row, I launch a web service, asynchronously. Before I move on to the next step in the process, I want to make sure that all the web services have...
11
by: Peter Kirk | last post by:
Hi there I am looking at using a thread-pool, for example one written by Jon Skeet (http://www.yoda.arachsys.com/csharp/miscutil/). Can anyone tell me if this pool provides the possibility to...
6
by: theGreatGnu | last post by:
Hi all, I am new to PHP, Apache and Mysql. But I least I have managed to install everything on my home computer on my own and everything is up and running. I can fetch data from the database and...
4
by: Dylan Parry | last post by:
Hi folks, I'm writing a program that needs to execute an external program and wait for it to finish running before it can make use of the output from that program. Specifically, the external...
0
by: mamod20 | last post by:
Please advise, I have the following example and want to know the best way to use $dbh->disconnect; and $sth->finish; -------------- $sql_host="localhost"; $sql_dataname = "database";...
1
by: Craig Coope | last post by:
I may be barking up the wrong tree here (maybe I can do all this in Excel) but... I have created an Excel sheet that lets me input job start and finish times and the amount of work done within...
5
by: Jim | last post by:
I have a form in an Access 2003 db that calls (using shell - thanks to this newsgroup) a Vb.net program I wrote to parse a text file. The call works fine. The VB parses the file correctly. How...
3
by: Andy B | last post by:
I have the property below. What I need to do is access the asp.net Menu controls MenuItems in a content page that are on a master page. I need to set the Enabled state to false when the page loads...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.