boost::filesystem path problem under WINDOWS

Hi,
Here is the code snippet I am using under windows in VS2008.
#define BOOST_WINDOWS_PATH
#define BOOST_WINDOWS_API
#include "stdafx.h"
#include

avanindra singh wrote:
Hi,
Here is the code snippet I am using under windows in VS2008.
#define BOOST_WINDOWS_PATH #define BOOST_WINDOWS_API
You shouldn't be manually defining these, and would normally get a compile error...
#include "stdafx.h"
but you probably are configure to use precompiled headers, so anything before stdafx.h is ignored.
#include
#include #include <iostream> #include "string" #include "conio.h" #include "vector" using namespace std; using namespace boost::filesystem;
int _tmain(int argc, _TCHAR* argv[]) { string _path = "E:\\doggy"; path dir_path(_path.c_str()); vector< pair
> _file_jpeg_pair; string full_list_path = _path+"\\" + "list.txt"; string bundle_path_str = _path+"\\" + "bundle"; path bundle_path(_path.c_str()); //creating bundle directory cout< This code is giving run time unhandled exception, so for that matter any other call of boost filesystem.
Catch the unhandled exception and see what the problem is. Filesystem throws boost::system::system_error exceptions.
Strange thing is the Windows path E:\doggy is being printed as E:/doggy, seems like the path is getting converted to POSIX format.
Depending on the boost filesystem version you can ask for native formatted strings. Jeff

Hi Jeff,
Thanks for the reply.
I caught the exception using this code:
try{ create_directory(bundle_path); } catch(boost::system::system_error const &e) { cerr<
Hi, Here is the code snippet I am using under windows in VS2008. #define BOOST_WINDOWS_PATH #define BOOST_WINDOWS_API
You shouldn't be manually defining these, and would normally get a compile error...
#include "stdafx.h"
but you probably are configure to use precompiled headers, so anything before stdafx.h is ignored.
#include
#include #include <iostream> #include "string" #include "conio.h" #include "vector" using namespace std; using namespace boost::filesystem; int _tmain(int argc, _TCHAR* argv[]) { string _path = "E:\\doggy"; path dir_path(_path.c_str()); vector< pair > _file_jpeg_pair; string full_list_path = _path+"\\" + "list.txt"; string bundle_path_str = _path+"\\" + "bundle"; path bundle_path(_path.c_str()); //creating bundle directory cout<
Catch the unhandled exception and see what the problem is. Filesystem throws boost::system::system_error exceptions.
Strange thing is the Windows path E:\doggy is being printed as E:/doggy, seems like the path is getting converted to POSIX format.
Depending on the boost filesystem version you can ask for native formatted strings. Jeff _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

Hi avanindra, std::exception::what: boost::filesystem::create_directory: The filename, directo ry name, or volume label syntax is incorrect: "E:\doggy" OK, I don't have the full story here. Is the directory name being specified in the C++ source code? If so then remember that "\" is used for character escape sequences. If you are specifying the name in the source code, you may need to type "E:\\doggy". The double "\" will resolve to a single "\" in the executable. HTH, Ian -- -- ACCU - Professionalism in programming - http://www.accu.org/

Hi Ian,
escape character is not the problem. I would put my code here:
#include "stdafx.h"#include "Windows.h"#include

Hi avanindra,
On 13 December 2010 19:01, avanindra singh
You can see that, I have used proper path. The problem is the Windows style path is getting converted somehow in POSIX format. As I printed the path and it came out to be
E:/doggy
Can you point me what mistake I am doing here.
Well... all I can suggest is to use the debugger to trace into the functions that modify your variables. That's the bad news. The good news is that you have the source code in question so it should be a no-brainer for you:) HTH, Ian -- -- ACCU - Professionalism in programming - http://www.accu.org/

avanindra singh wrote:
Hi Jeff,
Thanks for the reply.
I caught the exception using this code:
try{ create_directory(bundle_path); } catch(boost::system::system_error const &e) { cerr<
The printed output was
Throw in function (unknown) Dynamic exception type: class boost::exception_detail::clone_impl
,struct boost::filesystem::path _traits> > > > std::exception::what: boost::filesystem::create_directory: The filename, directo ry name, or volume label syntax is incorrect: "E:\doggy" Can you point me what mistake I am doing here?..I believe the syntax of path is correct.
Please don't top post. Lookup the documentation on create_directory versus create_directories. Simplify your test case to just what's needed for creating your directories. Jeff
participants (3)
-
avanindra singh
-
Ian Bruntlett
-
Jeff Flinn