Reading Project

Aspose.Tasks for C++ lets you work with Microsoft Project (MPP/XML) files without having Microsoft Project installed, or using Microsoft Office Automation. A powerful and flexible API, Aspose.Tasks saves you time and effort by giving you the tools you need to write efficient code for manipulating project files in your C++ applications.

This article explains how to open and read project file.

Reading a Project File

At the moment, Aspose.Tasks can export Microsoft Project to Microsoft Project’s XML format only. This is true if you are creating a new project. Aspose.Tasks for C++ lets you read existing MPP files and save these back in MPP format after updating. This allows reading MPP as well as MPT formats as input templates. This article shows how a Project file (XML, MPP, MPT) can be read using the Project class’s constructor.

Reading Project Files as a Template

1// The path to the documents directory.
2System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
3    
4// Read existing project template file
5System::SharedPtr<Project> project = System::MakeObject<Project>(dataDir + u"ReadProjectFiles.mpp");

Reading Project File from Stream

 1// The path to the documents directory.
 2System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
 3    
 4// Read project xml into file stream
 5{
 6    System::SharedPtr<System::IO::Stream> filesStream = System::MakeObject<System::IO::FileStream>(dataDir + u"ReadProjectFileFromStream.xml", System::IO::FileMode::Open);
 7    // Clearing resources under 'using' statement
 8    System::Details::DisposeGuard<1> __dispose_guard_0({ filesStream});
 9    // ------------------------------------------
10    
11    try
12    {
13        // Create project using file stream
14        System::SharedPtr<Project> project = System::MakeObject<Project>(filesStream);
15    }
16    catch(...)
17    {
18        __dispose_guard_0.SetCurrentException(std::current_exception());
19    }
20}

Ignoring invalid characters during loading Project

Some files may have invalid characters in the custom fields. Microsoft Project does not allow invalid character so the files have been created or manipulated with automation or some other tools. If these files are loaded using the API, they may lead to an exception. In order to ignore such invalid characters, the overloaded constructor of Project class can be used with the delegate method ParseErrorCallBack.

 1void IgnoreInvalidCharactersDuringloadingProject::Run()
 2{
 3    // Open modified xml stream
 4    {
 5        System::SharedPtr<System::IO::MemoryStream> stream = System::MakeObject<System::IO::MemoryStream>(System::Text::Encoding::get_UTF8()->GetBytes(GetModifiedXml()));
 6        // Clearing resources under 'using' statement
 7        System::Details::DisposeGuard<1> __dispose_guard_0({ stream});
 8        // ------------------------------------------
 9        
10        try
11        {
12            System::SharedPtr<Project> project = System::MakeObject<Project>(stream, static_cast<ParseErrorCallback>(CustomDurationHandler));
13        }
14        catch(...)
15        {
16            __dispose_guard_0.SetCurrentException(std::current_exception());
17        }
18    }
19}

Read Password Protected Projects (2003 Format)

The Project class exposes the Project() constructor which is capable of reading password-protected files in 2003 format. Saving a password-protected file is not supported yet.

To read a password-protected project file:

  1. Load a Microsoft Project file.
  2. In the constructor, provide a password as the second argument to the constructor.

The following code example demonstrates how to read password-protected project file.

1// The path to the documents directory.
2System::String dataDir = RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
3    
4System::SharedPtr<Project> project = System::MakeObject<Project>(dataDir + u"PasswordProtectedProject.mpp", System::String(u"password"));

Working With Encodings

Aspose.Tasks provides support for the encoding of MPX files. The following code example demonstrates how to use the encoding settings.

 1// Specify Encodings
 2{
 3    System::SharedPtr<System::IO::StreamReader> streamReader = System::MakeObject<System::IO::StreamReader>(dataDir + u"Project.mpx", System::Text::Encoding::GetEncoding(u"ISO-8859-1"));
 4    // Clearing resources under 'using' statement
 5    System::Details::DisposeGuard<1> __dispose_guard_0({ streamReader});
 6    // ------------------------------------------
 7    
 8    try
 9    {
10        auto project = System::MakeObject<Project>(streamReader->get_BaseStream());
11    }
12    catch(...)
13    {
14        __dispose_guard_0.SetCurrentException(std::current_exception());
15    }
16}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.