|
Boost Users : |
From: Lawrence Spector (Lawrence.Spector_at_[hidden])
Date: 2006-10-31 16:04:13
I'm running on WinXP with VS7.1 and Boost v1.33.1. I compiled and tried
it and was able to reproduce the error. Whenever you open a file, you
should always do a check on file.fail() to make sure it opened
successfully. You didn't, so you didn't realize the error happened
earlier. Boost correctly threw an exception when you tried to check the
size of the file.
#include <boost/filesystem/operations.hpp>
#include <fstream>
#include <iostream>
int main()
{
try
{
// Create a file
using namespace std;
const string fileName("/temp/test.txt");
ofstream file;
file.open(fileName.c_str());
if (file.fail())
{
throw std::runtime_error("Unknown file");
}
const string message("this is a test");
file << message;
file.close();
const boost::intmax_t fileSize =
boost::filesystem::file_size(fileName);
if( fileSize != message.size() )
throw std::exception("Bad result");
}
catch(std::exception& e)
{
std::cout << "Caught fatal error: " << e.what() <<
std::endl;
}
catch(...)
{
std::cout << "Caught unknown error" << std::endl;
}
std::cin.get(); // so the window stays up to view output
return 0;
}
Output:
Caught fatal error: Unknown file.
You probably wanted to make your path C:\temp\test.txt, since it's a
Windows program, right?
-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of Rush Manbert
Sent: Tuesday, October 31, 2006 2:45 PM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] boost filesystem
Aubrey, Jason wrote:
>
> Replies are at the end of this message:
> Aubrey, Jason wrote:
>
>>Hi,
>>
>>When I run the following program it runs successfully but throws an
>>exception during shutdown. I don't know why, but it seems that the
>>call to boost::filesystem::file_size() is corrupting memory somehow.
>>This example only shows the call to file_size() but I think I've seen
>>similar trouble with other calls within boost::filesystem.
>>
>>Am I doing something wrong here or is this a bug?
>>
>>Regards,
>>Jason Aubrey
>>
>>----------------------
>>
>>Environment:
>> OS: Win2k
>> Compiler: VS7.1
>> Boost: v1.33.1
>>
>>----------------------
>>
>>#include <boost/filesystem/operations.hpp> #include <fstream>
>>
>>int main(int, char**)
>>{
>> // Create a file
>> using namespace std;
>> const string fileName("/temp/test.txt");
>> ofstream file;
>> file.open(fileName.c_str());
>> const string message("this is a test");
>> file << message;
>> file.close();
>>
>> const boost::intmax_t fileSize =
>>boost::filesystem::file_size(fileName);
>>
>> if( fileSize != message.size() )
>> throw std::exception("Bad result");
>>
>> return 0;
>>}
>>
>
>
> Either I'm missing something, or...
>
> file_size takes a path reference as its calling argument. You're
passing
> a string. How does this even compile?
>
> - Rush
> _______________________________________________
>
> Thanks for the Reply Rush.
>
> If I modify the above code to contain the following I still see the
same
> behavior:
> const boost::filesystem::path filePath(fileName);
> const boost::intmax_t fileSize =
> boost::filesystem::file_size(filePath);
>
> Regards,
> Jason Aubrey
> _______________________________________________
>
> Would you be able to print out what the values of message.size() and
> fileSize are, right before you do that comparison?
>
> Thanks,
> Lawrence Spector
> _______________________________________________
>
> Both fileSize and message.size() are 14. The exception thrown is not
a
> result of the if-block, but the result of a check by the runtime when
it
> does its cleanup during program shutdown.
>
Hi Jason,
Well, it's too bad that the Easy Answer wasn't the correct answer. :-)
I made a console app using VS2005 and Boost 1.33.1, and used your exact
code as my main routine. It just works.
I also tried setting things up so that my debug build would link against
the release version of the library, because the last person that was
having filesystem problems had done that, but it just works in that case
too.
So I'm afraid that I can't reproduce your problem with my Windows setup.
If you run your app under the debugger and break when it gets the error,
can you tell what sort of object it's trying to delete by backtracking
up the stack? That might give some hint about what's happening.
Best regards,
Rush
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net