Bagaimana untuk membaca fail dalam C++

Bagaimana untuk membaca fail dalam C++

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single fungsi panggilan. mapi_message::from_file() dan mapi_message::from_stream() Letakkan I Mesej penuh – subjek, badan, penghantar, penerima dan lampiran – ke dalam ingatan Objek tanpa Outlook atau COM.

Langkah 1 – Menubuhkan projek

Klon repository dan tambahkan ke dalam 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)

Langkah 2 – Termasuk header

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

Header ini menyediakan mapi_message Semua orang yang menyokong dalam aspose::email::foss::msg Nama ruang.


Langkah 3 — Muat naik mesej daripada laluan fail

digunakan mapi_message::from_file() Apabila anda mempunyai 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';
}

Langkah 4 – Muat naik mesej daripada aliran

digunakan mapi_message::from_stream() untuk mengalih keluar daripada mana-mana std::istream berguna untuk pemprosesan data MSG yang diterima melalui rangkaian atau dari buffer dalam memori:

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

Selalu buka aliran dengan std::ios::binary Untuk mengelakkan Windows baris akhir Terjemahan daripada menghancurkan kontena CFB.


Langkah 5 - Iterate penerima

message.recipients() Kembali kepada a std::vector daripada objek penerima, setiap dengan display_name, email_address,dan recipient_type Lapangan :

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

Langkah 6 - Iterate attachments

message.attachments() Kembali kepada a std::vector daripada objek pengikat. setiap pengekat Eksposur filename, mime_type, data (Baca juga : Perbezaan antara pergerakan yang berlebihan dan perceraian), content_id,dan yang is_embedded_message() Berkhotbah :

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

Isu Umum dan Penyelesaian

kosong body() Selepas pengecasan. Sesetengah mesej menyimpan teks sahaja dalam badan HTML Perkhidmatan. cek message.html_body() bila message.body() Mengembalikan string kosong.

Rangkaian dibuka tanpa std::ios::binary. Pada Windows, aliran mod teks terjemah Urutan CRLF, secara diam-diam merosakkan data CFB binari. Selalu buka fail MSG dengan std::ios::binary.

msg_exception diserahkan kepada fail yang kelihatan sah. Pastikan fail ini asli MSG Fail yang disimpan oleh beberapa alat eksport mungkin teks biasa atau MIME dan Tidak boleh dibahagikan oleh mapi_message::from_file().

recipients() Mengembalikan vektor kosong. Fail yang lebih tua MSG kadang-kadang melepaskan penerima meja tetapi kedai menunjukkan penerima dalam display_to Perkhidmatan ini boleh diakses melalui message.get_property_value() dengan common_message_property_id::display_to dan property_type_code::ptyp_string.

Data yang besar dalam memori. Melayumapi_message::from_file() dan from_stream() mengisi semua mesej termasuk semua byte lampiran. untuk fail besar, buka Kontena yang berisi dengan msg_reader dan memeriksa aliran lampiran tanpa sepenuhnya untuk mengmaterialkan mereka.

Soalan Lazim

Apa perbezaan antara from_file() dan from_stream()?

Kedua-dua produk ini mempunyai identiti yang sama mapi_message objek yang. from_file() Mengakui a std::filesystem::path Membuka fail secara dalaman. from_stream() Membaca daripada apa-apa std::istream yang anda berikan – berguna apabila data MSG sudah berada dalam memori atau Berlepas daripada sebuah socket.

boleh from_file() simpan fail terbuka selepas muat naik?

Fail dibuka, disemak sepenuhnya ke dalam memori dan ditutup sebelum from_file() Anda boleh memindahkan atau memadam fail sumber segera selepas panggilan.

Bolehkah saya membaca fail MSG yang dicipta oleh Outlook pada macOS atau Linux?

Format MSG (properti File Compound + MAPI) boleh dipindahkan ke dalam Sistem operasi. apa-apa .msg fail yang dihasilkan oleh mana-mana versi Outlook boleh dibuka dengan mapi_message::from_file().

Bagaimana saya boleh membaca badan HTML?

Panggilan message.html_body().Jika mesej itu dicipta dengan hanya badan teks biasa, ini mengembalikan string kosong. message.body() Mengembalikan badan teks biasa.

Adakah mod ketat merupakan default?

mapi_message::from_file(path, strict) dan from_stream(stream, strict) Mengambil satu Pilihan strict BULAN. yang telah ditentukan false,yang boleh menampung struktur kecil Perbezaan dalam fail dunia sebenar.

juga

 Bahasa Melayu