diff --git a/aegisub/libaegisub/include/libaegisub/io.h b/aegisub/libaegisub/include/libaegisub/io.h index eafd0bfd7..bc4c8784d 100644 --- a/aegisub/libaegisub/include/libaegisub/io.h +++ b/aegisub/libaegisub/include/libaegisub/io.h @@ -40,7 +40,7 @@ DEFINE_SIMPLE_EXCEPTION_NOINNER(IOAccessRead, IOError, "io/read") DEFINE_SIMPLE_EXCEPTION_NOINNER(IOAccessWrite, IOError, "io/write") */ -std::ifstream* Open(const std::string &file); +std::ifstream* Open(const std::string &file, bool binary = false); class Save { std::ofstream *fp; diff --git a/aegisub/libaegisub/unix/io.cpp b/aegisub/libaegisub/unix/io.cpp index 50e1ddecd..d48394b43 100644 --- a/aegisub/libaegisub/unix/io.cpp +++ b/aegisub/libaegisub/unix/io.cpp @@ -36,7 +36,7 @@ namespace agi { namespace io { -std::ifstream* Open(const std::string &file) { +std::ifstream* Open(const std::string &file, bool) { LOG_D("agi/io/open/file") << file; acs::CheckFileRead(file); diff --git a/aegisub/libaegisub/windows/io.cpp b/aegisub/libaegisub/windows/io.cpp index acb93cc8f..5986a286c 100644 --- a/aegisub/libaegisub/windows/io.cpp +++ b/aegisub/libaegisub/windows/io.cpp @@ -37,11 +37,11 @@ namespace agi { using agi::charset::ConvertW; -std::ifstream* Open(const std::string &file) { +std::ifstream* Open(const std::string &file, bool binary) { LOG_D("agi/io/open/file") << file; acs::CheckFileRead(file); - std::ifstream *stream = new std::ifstream(ConvertW(file).c_str()); + std::ifstream *stream = new std::ifstream(ConvertW(file).c_str(), std::ios::in | (binary ? std::ios::binary : 0)); if (stream->fail()) { delete stream; diff --git a/aegisub/src/ass_attachment.cpp b/aegisub/src/ass_attachment.cpp index 6bba6dfec..9f7d77e1b 100644 --- a/aegisub/src/ass_attachment.cpp +++ b/aegisub/src/ass_attachment.cpp @@ -38,13 +38,19 @@ #ifndef AGI_PRE #include -#include + +#include #endif #include "ass_attachment.h" +#include "compat.h" + +#include +#include + AssAttachment::AssAttachment(wxString name) -: data(new std::vector) +: data(new std::vector) , filename(name) { wxFileName fname(filename); @@ -113,21 +119,15 @@ const wxString AssAttachment::GetEntryData() const { } void AssAttachment::Extract(wxString filename) { - wxFileOutputStream fp(filename); - if (!fp.Ok()) return; - fp.Write(&(*data)[0], data->size()); + agi::io::Save(STD_STR(filename)).Get().write(&(*data)[0], data->size()); } void AssAttachment::Import(wxString filename) { - // Open file and get size - wxFileInputStream fp(filename); - if (!fp.Ok()) throw "Failed opening file"; - int size = fp.SeekI(0,wxFromEnd); - fp.SeekI(0,wxFromStart); - - // Set size and read - data->resize(size); - fp.Read(&(*data)[0],size); + agi::scoped_ptr file(agi::io::Open(STD_STR(filename))); + file->seekg(0, std::ios::end); + data->resize(file->tellg()); + file->seekg(0, std::ios::beg); + file->read(&(*data)[0], data->size()); } wxString AssAttachment::GetFileName(bool raw) { diff --git a/aegisub/src/ass_attachment.h b/aegisub/src/ass_attachment.h index e9d3a83d7..4fcb670a3 100644 --- a/aegisub/src/ass_attachment.h +++ b/aegisub/src/ass_attachment.h @@ -45,7 +45,7 @@ /// @brief DOCME class AssAttachment : public AssEntry { /// Decoded file data - std::tr1::shared_ptr > data; + std::tr1::shared_ptr > data; /// Encoded data which has been read from the script but not yet decoded wxString buffer;