Я не знаю, как читать (RTF) данные из файла .docx и сохранять их в буфере обмена, поэтому я могу скопировать их в другой файл .docx с помощью сочетаний клавиш CTRL + V. Я не могу найти примеры того, как это сделать.
Мой последний вопрос по коду был 4,5 года назад, так как я всегда разбираюсь в этом самостоятельно, но с этим мне нужна помощь
Хорошо, мне удалось скопировать данные из .docx в другой .docx с помощью std :: ios :: binary.
/// Copy file contents
std::ifstream inputFile("test.docx", std::ios::in | std::ios::binary);
inputFile.seekg(0, std::ios::end);
int length = inputFile.tellg();
inputFile.seekg(0, std::ios::beg);
std::string fileContents;
fileContents.resize(length);
inputFile.read(&fileContents[0], length);
inputFile.close();
/// Paste file contents
std::ofstream outputFile("new.docx", std::ios::app | std::ios::binary);
outputFile.write(&fileContents[0], length);
outputFile.close();
Мне даже удалось сохранить некоторый текст (данные) изTXT-файл в буфер обмена в формате CF_TEXT. Он работает, как я ожидал, текст в файле .txt хранится в буфере обмена, и я могу использовать CTRL + V.
int main () {
std::vector<char> bytes = ReadAllBytes("test.txt");
std::string x(bytes.begin(), bytes.end());
std::cout << bytes.size() << std::endl;
SaveClipboard(x.c_str());
}
void SaveClipboard(const char* text) {
HGLOBAL global = GlobalAlloc(GMEM_FIXED, strlen(text) + 1);
memcpy(global, text, strlen(text)); //text size + \0 character
if(OpenClipboard(NULL)) {
EmptyClipboard();
SetClipboardData(CF_TEXT, global);
CloseClipboard();
}
}
std::vector<char> ReadAllBytes(char const* filename) {
std::ifstream ifs(filename, std::ios::binary | std::ios::ate);
std::ifstream::pos_type pos = ifs.tellg();
std::vector<char> result(pos);
ifs.seekg(0, std::ios::beg);
ifs.read(&result[0], pos);
return result;
}
Хорошо, теперь, как мне получить данные из файла .docx и сохранитьэти данные в буфере обмена, поэтому я могу использовать CTRL + V в открытом окне .docx.
Я пытался использовать:
std::vector<char> bytes = ReadAllBytes("test.docx");
DWORD CF_RTF = RegisterClipboardFormat("Rich Text Format");
SetClipboardData(CF_RTF, global);
Но тогда я получаю результат "PK____" в буфере обмена, когда вставляю его в открытый файл .docx.
Спасибозаранее