Ako čítať súbory v C++

Ako čítať súbory v C++

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funkcia volania . mapi_message::from_file() a mapi_message::from_stream() Load na úplné posolstvo – subjekt, telo, odosielateľ, príjemcovia a prílohy – do pamäte objekt bez závislosti Outlook alebo COM.

Krok 1 - Vytvorenie projektu

Klonovať úložište a pridať ho do svojho CMakeLists.txt:

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Krok 2 – Zahrňte hlavičku

#include "aspose/email/foss/msg/mapi_message.hpp"

Tento jediný header poskytuje mapi_message a všetkých podporujúcich ľudí v aspose::email::foss::msg Názov priestoru.


Krok 3 – Nahrať správu z cesty súboru

Používať mapi_message::from_file() Keď máte a std::filesystem::path:

#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("sample.msg"));

    std::cout << "Subject: " << message.subject() << '\n';
    std::cout << "From:    " << message.sender_name()
              << " <" << message.sender_email_address() << ">\n";
    std::cout << "Body:    " << message.body() << '\n';
}

Krok 4 – Nahrať správu z prúdu

Používať mapi_message::from_stream() Odtrhnúť od akéhokoľvek std::istream - užitočné pre spracovanie údajov MSG prijatých cez sieť alebo z pamäťového vyrovnávača:

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    std::cout << "Subject: " << message.subject() << '\n';
}

Vždy otvorte prúd s std::ios::binary Ako zabrániť končeniu riadkov systému Windows Preklad z kontingenčného kontajnera CFB.


Krok 5 – Iterujte príjemcov

message.recipients() Vráť sa A std::vector z prijímajúcich objektov, každý s display_name, email_address,a recipient_type Na poli:

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    for (std::size_t i = 0; i < message.recipients().size(); ++i)
    {
        const auto& r = message.recipients()[i];
        std::cout << "[" << (i + 1) << "] "
                  << r.display_name << " <" << r.email_address << ">"
                  << " type=" << r.recipient_type << '\n';
    }
}

Krok 6 - Iterujte prílohy

message.attachments() Vráť sa A std::vector Zloženie: Každý objekt je pripojený Expozície filename, mime_type, data (zhruba v hrubých bytoch), content_id,a tiež The is_embedded_message() Prednášať sa:

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    for (std::size_t i = 0; i < message.attachments().size(); ++i)
    {
        const auto& a = message.attachments()[i];
        std::cout << "[" << (i + 1) << "] "
                  << a.filename << "  mime=" << a.mime_type
                  << "  bytes=" << a.data.size()
                  << "  embedded=" << (a.is_embedded_message() ? "yes" : "no")
                  << '\n';
    }
}

Bežné problémy a riešenia

prázdne body() Po nakladaní. Niektoré správy ukladajú text iba v HTML tele nehnuteľnosti - kontrolovať message.html_body() Kedy message.body() Vráti prázdny reťazec.

Stream otvorený bez std::ios::binary. V systéme Windows prekladajú textové prúdy sekvencie CRLF, ticho poškodzujúce binárne CFB dáta. Vždy otvárajte súbory s MSG std::ios::binary.

msg_exception vyhodené pre platný vzhľad súboru. Overiť, či je súbor skutočný MSG Súbory uložené niektorými exportnými nástrojmi môžu byť jednoduchým textom alebo MIME a nemôže byť rozdelený na mapi_message::from_file().

recipients() Vráti prázdny vektor. Staršie MSG súbory niekedy vynechajú príjemcu tabuľky, ale ukladacieho displeja príjemcov v display_to Vlastnosti: Prístup k nim cez message.get_property_value() s common_message_property_id::display_to a property_type_code::ptyp_string.

Veľké pripojenie dát do pamäte. - smapi_message::from_file() a from_stream() nahrať celú správu vrátane všetkých príloh. Pre veľké súbory otvorte Kontajnerový priestor s msg_reader a kontrolovať pripojenie prúdov bez plného materializovať ich.

Často kladené otázky

Aký je rozdiel medzi from_file() a from_stream()?

Obaja tvoria identickú mapi_message Objekty sú . from_file() Prijímať a std::filesystem::path Otvorte súbor interne. from_stream() čítať od akýkoľvek std::istream poskytnete – užitočné, keď sú údaje MSG už v pamäti alebo Prichádza cez socket.

robí from_file() Udržiavať súbor otvorený po načítaní?

Súbor sa otvorí, úplne zapíše do pamäte a predtým zatvorí. from_file() Môžete premiestniť alebo odstrániť zdrojový súbor ihneď po hovore.

Môžem čítať súbory MSG vytvorené programom Outlook v systéme macOS alebo Linux?

Áno. formát MSG (vlastnosti súboruOLE Compound File + MAPI) je prenosný cez operačné systémy. akýkoľvek .msg Súbor vytvorený ľubovoľnou verziou programu Outlook je možné otvoriť. s mapi_message::from_file().

Ako čítať HTML telo?

volanie message.html_body().Ak bola správa vytvorená iba s textovým telom, Vráti prázdny reťazec. message.body() Vráti telo jednoduchého textu.

Je prísny mód predvolený?

mapi_message::from_file(path, strict) a from_stream(stream, strict) Prijmite si voliteľný strict boolean. Default je false, ktorý toleruje menšie štrukturálne V reálnom svete súbory.

Taktiež

 Slovenčina