Kaip skaityti failus C++

Kaip skaityti failus C++

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funkcijos skambučiai . mapi_message::from_file() ir mapi_message::from_stream() Įkelkite pilna žinutė – subjektas, kūnas, siuntėjas, gavėjai ir priedai – į atmintį objektas be „Outlook“ ar COM priklausomybės.

1 žingsnis - Projekto sukūrimas

Klonuokite saugyklą ir pridėkite ją prie savo 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)

2 žingsnis – įtraukite antraštę

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

Šis vienas šefas suteikia mapi_message Visiems palaikantiems žmones, kurie aspose::email::foss::msg Namų erdvė.


3 žingsnis - Įkelti pranešimą iš failų kelio

Naudokite mapi_message::from_file() Kai turite 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';
}

4 žingsnis – Įkelkite pranešimą iš srauto

Naudokite mapi_message::from_stream() Iš bet kurios pusės iš std::istream Naudinga dėl MSG duomenų, gautų per tinklą arba iš atminties buferio, apdorojimas:

#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';
}

Visada atidarykite srautą su std::ios::binary Norėdami išvengti “Windows” linijos pabaigos Išvertus iš CFB konteinerio.


5 žingsnis - Iterate gavėjai

message.recipients() Grįžti į A std::vector Iš kiekvieno objekto, su display_name, email_address,ir recipient_type Lauko laukai :

#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';
    }
}

6 žingsnis - Iterate priedai

message.attachments() Grįžti į A std::vector Priedų uždėjimas. kiekvienas priedas eksponatų filename, mime_type, data (iš žaliųjų burtų), content_id,ir The is_embedded_message() Pranašauja :

#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';
    }
}

Bendros problemos ir taisyklės

Tuščias body() Po pakrovimo. Kai kurie pranešimai saugo tekstą tik HTML kūne Nekilnojamas turtas. patikrinti message.html_body() Kada message.body() Grąžina tuščią eilutę.

Srautas atidarytas be std::ios::binary. Windows, teksto režimo srautai verčia CRLF sekos, tyliai sugadinančios dvejetainius CFB duomenis. Visada atidarykite failus su MSG std::ios::binary.

msg_exception Išmesti į tinkamą failą. Patikrinkite, ar failas yra tikras MSG Kai kurių eksporto įrankių išsaugoti failai gali būti paprastas tekstas arba MIME ir Negalima išmesti per mapi_message::from_file().

recipients() Grąžina tuščią vektorį. Vyresni MSG failai kartais praleidžia gavėją lentelėje, bet parduotuvės rodo gavėjus į display_to Įsigyti nuosavybę. prieiga prie jos message.get_property_value() su common_message_property_id::display_to ir property_type_code::ptyp_string.

Dideli duomenų įtraukimai į atmintį. Štaimapi_message::from_file() ir from_stream() įkelti visą pranešimą, įskaitant visus priedus.Dideliems failams atidarykite Konteinerių pakuotė su msg_reader ir tikrinkite priedų srautus be pilno Jų materializavimas.

Dažnai užduodami klausimai

Koks skirtumas tarp from_file() ir from_stream()?

Abu gaminiai yra identiški mapi_message objektų . from_file() Priimti a std::filesystem::path Atverti failą viduje. from_stream() Skaityti iš bet kokia std::istream Jūs pateikiate – naudinga, kai MSG duomenys jau yra atmintyje arba Atvykimas per socketą.

Daro from_file() Ar failą reikia atidaryti po įkėlimo?

Failas atidaromas, visiškai išgryninamas į atmintį ir uždaromas prieš tai. from_file() Galite perkelti arba ištrinti šaltinio failą iš karto po skambučio.

Ar galiu skaityti failus, kuriuos sukūrė „Outlook“ sistemoje macOS ar Linux?

Taip. MSG formatas (OLE sudėtinis failas + MAPI savybės) yra nešiojamas per Operacinės sistemos. bet kuri .msg failą, sukurtą bet kurios „Outlook“ versijos galima atidaryti su mapi_message::from_file().

Kaip skaityti HTML kūną?

skambinti message.html_body().Jei pranešimas buvo sukurtas tik su paprasto teksto kūnu, Tai grąžina tuščią eilutę. message.body() Grąžina tekstinį kūną.

Ar griežtas režimas yra numatytasis?

mapi_message::from_file(path, strict) ir from_stream(stream, strict) Priimti vieną Pasirinktiniai strict Boolean.Default yra false, kuris toleruoja mažesnę struktūrinę Realaus pasaulio failų atnaujinimas.

Taip pat

 Lietuvių