Cara Membaca File dalam C++

Cara Membaca File dalam C++

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Fungsi call. mapi_message::from_file() dan mapi_message::from_stream() Mengunggah The pesan lengkap – subjek, tubuh, pengirim, penerima dan lampiran – ke dalam memori Tidak ada pengaturan Outlook atau COM.

Langkah 1 – Buat Proyek

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 – Menggunakan Header

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

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


Langkah 3 – Mengunggah pesan dari jalur file

Menggunakan mapi_message::from_file() Ketika Anda memiliki 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 – Mengunggah pesan dari stream

Menggunakan mapi_message::from_stream() Untuk mengusir dari setiap std::istream berguna untuk Mengolah data yang diterima melalui jaringan 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 mencegah Windows line-end Terjemahan dari kata sandi yang digunakan untuk mengisi CFB.


Langkah 5 – Iterasi penerima

message.recipients() Kembali ke a std::vector dari objek penerima, masing-masing dengan display_name, email_address,dan recipient_type bidang :

#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 – Iterasi attachments

message.attachments() Kembali ke a std::vector dari objek yang diikat. setiap attachment Eksposur filename, mime_type, data (Baca juga : Batik yang Berbahaya), content_id,Dan yang is_embedded_message() Untuk mendekati:

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

Masalah umum dan fixes

kosong body() Setelah mengisi daya. Beberapa pesan hanya menyimpan teks di dalam HTML body. Properti yang dipesan. cek message.html_body() Ketika message.body() Mengembalikan string kosong.

Rute dibuka tanpa std::ios::binary. Pada Windows, aliran mode teks terjemahkan CRLF, diam-diam merusak data CFB biner. Selalu buka file dengan std::ios::binary.

msg_exception dicetak untuk file yang valid. Periksa apakah file tersebut asli. File yang disimpan oleh beberapa alat ekspor mungkin teks biasa atau MIME dan Tidak dapat dipisahkan oleh mapi_message::from_file().

recipients() Mengembalikan vektor kosong. File yang lebih tua MSG kadang-kadang melewatkan penerima tabel tetapi toko tampilan penerima di display_to Pihak yang berwenang. aksesnya melalui message.get_property_value() dengan common_message_property_id::display_to dan property_type_code::ptyp_string.

Data yang besar dalam memori. yangmapi_message::from_file() dan from_stream() mengunggah seluruh pesan termasuk semua byte lampiran. untuk file besar, buka Kontainer yang berisi dengan msg_reader dan memeriksa aliran attachment tanpa sepenuhnya untuk mengmaterialisasikannya.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara from_file() dan from_stream()?

Keduanya menghasilkan produk yang identik. mapi_message Objek yang. from_file() menerima a std::filesystem::path Lalu buka file secara internal. from_stream() Membaca dari Setiap std::istream yang Anda berikan – berguna ketika data MSG sudah ada di memori atau Menuju sebuah socket.

melakukan from_file() Apakah file tersebut akan terbuka setelah di-load?

Tidak. file dibuka, sepenuhnya disusun ke dalam memori, dan ditutup sebelum from_file() Anda dapat memindahkan atau menghapus file sumber segera setelah panggilan.

Dapatkah saya membaca file MSG yang dibuat oleh Outlook di macOS atau Linux?

Format MSG (propriet File COMPOUND + MAPI) dapat di-portasi melalui Sistem Operasi : Setiap .msg File yang dihasilkan oleh versi Outlook dapat dibuka dengan mapi_message::from_file().

Bagaimana cara membaca HTML body?

Panggilan message.html_body().Jika pesan dibuat dengan hanya satu teks, Ini mengembalikan string kosong. message.body() Mengembalikan body teks.

Apakah mode ketat adalah default?

mapi_message::from_file(path, strict) dan from_stream(stream, strict) menerima suatu Opsi strict Boolean. yang tidak dapat dipisahkan adalah false,yang menahan struktur yang lebih kecil. Menggunakan file dunia nyata.

Demikian juga

 Bahasa Indonesia