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.gitadd_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.