dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #19131
Re: [Branch ~dolfin-core/dolfin/main] Rev 4998: Fix bug in File.cpp when creating directories.
-
To:
DOLFIN Mailing List <dolfin@xxxxxxxxxxxxxxxxxxx>
-
From:
Anders Logg <logg@xxxxxxxxx>
-
Date:
Tue, 17 Aug 2010 12:12:41 +0200
-
In-reply-to:
<20100817094622.23670.81568.launchpad@loganberry.canonical.com>
-
User-agent:
Mutt/1.5.20 (2009-06-14)
On Tue, Aug 17, 2010 at 09:46:22AM -0000, noreply@xxxxxxxxxxxxx wrote:
> File::File(const std::string filename, std::string encoding)
> {
> - // Get directory and extension
> + // Get file path and extension
> const boost::filesystem::path path(filename);
> - const boost::filesystem::path directory = path.parent_path();
> - const std::string extension = path.extension();
> + const std::string extension = boost::filesystem::extension(path);
Is there a difference between the member function and the free
function?
> - // Create directory if necessary
> - if (!is_directory(directory))
> + // Create directory if we have a parent path
> + if ( path.has_parent_path() )
> {
> + const boost::filesystem::path directory = path.parent_path();
> cout << "Creating directory \"" << directory.string() << "\"." << endl;
> boost::filesystem::create_directories(directory);
> }
What was the problem here?
--
Anders
> @@ -49,24 +49,24 @@
> // Get suffix after discarding .gz
> const std::string ext = boost::filesystem::extension(boost::filesystem::basename(path));
> if (ext == ".xml")
> - file = new XMLFile(filename, true);
> + file.reset(new XMLFile(filename, true));
> else
> error("Unknown file type for \"%s\".", filename.c_str());
> }
> else if (extension == ".xml")
> - file = new XMLFile(filename, false);
> + file.reset(new XMLFile(filename, false));
> else if (extension == ".m")
> - file = new OctaveFile(filename);
> + file.reset(new OctaveFile(filename));
> else if (extension == ".py")
> - file = new PythonFile(filename);
> + file.reset(new PythonFile(filename));
> else if (extension == ".pvd")
> - file = new VTKFile(filename, encoding);
> + file.reset(new VTKFile(filename, encoding));
> else if (extension == ".raw")
> - file = new RAWFile(filename);
> + file.reset(new RAWFile(filename));
> else if (extension == ".xyz")
> - file = new XYZFile(filename);
> + file.reset(new XYZFile(filename));
> else if (extension == ".bin")
> - file = new BinaryFile(filename);
> + file.reset(new BinaryFile(filename));
> else
> error("Unknown file type for \"%s\".", filename.c_str());
> }
> @@ -76,44 +76,42 @@
> switch (type)
> {
> case xml:
> - file = new XMLFile(filename, false);
> + file.reset(new XMLFile(filename, false));
> break;
> case matlab:
> - file = new MatlabFile(filename);
> + file.reset(new MatlabFile(filename));
> break;
> case octave:
> - file = new OctaveFile(filename);
> + file.reset(new OctaveFile(filename));
> break;
> case python:
> - file = new PythonFile(filename);
> + file.reset(new PythonFile(filename));
> break;
> case vtk:
> - file = new VTKFile(filename, encoding);
> + file.reset(new VTKFile(filename, encoding));
> break;
> case raw:
> - file = new RAWFile(filename);
> + file.reset(new RAWFile(filename));
> break;
> case xyz:
> - file = new XYZFile(filename);
> + file.reset(new XYZFile(filename));
> break;
> case binary:
> - file = new BinaryFile(filename);
> + file.reset(new BinaryFile(filename));
> break;
> default:
> - file = 0;
> error("Unknown file type for \"%s\".", filename.c_str());
> }
> }
> //-----------------------------------------------------------------------------
> File::File(std::ostream& outstream)
> {
> - file = new XMLFile(outstream);
> + file.reset(new XMLFile(outstream));
> }
> //-----------------------------------------------------------------------------
> File::~File()
> {
> - delete file;
> - file = 0;
> + // Do nothing
> }
> //-----------------------------------------------------------------------------
> void File::operator<<(const Function& u)
> @@ -135,7 +133,10 @@
> std::ifstream file(filename.c_str());
> if (!file.is_open())
> return false;
> - file.close();
> - return true;
> + else
> + {
> + file.close();
> + return true;
> + }
> }
> //-----------------------------------------------------------------------------
>
> === modified file 'dolfin/io/File.h'
> --- dolfin/io/File.h 2010-06-02 11:31:31 +0000
> +++ dolfin/io/File.h 2010-08-17 09:43:44 +0000
> @@ -15,6 +15,7 @@
> #include <ostream>
> #include <string>
> #include <utility>
> +#include <boost/scoped_ptr.hpp>
> #include "GenericFile.h"
>
> namespace dolfin
> @@ -72,7 +73,7 @@
> private:
>
> // Pointer to implementation (envelop-letter design)
> - GenericFile* file;
> + boost::scoped_ptr<GenericFile> file;
>
> };
>
>
Attachment:
signature.asc
Description: Digital signature
Follow ups