Как сравнить два документа слова? [закрытый]

Немного другая проблема, которая вызывает очень похожие сообщения компилятора, зависит от времени жизни объекта, а не для хранения явной ссылки. Примером этого является библиотека ssh2 . При разработке чего-то большего, чем тестовый проект, возникает соблазн попытаться помещать Session и Channel, полученные из этого сеанса рядом друг с другом, в структуру, скрывая детали реализации от пользователя. Однако обратите внимание, что определение Channel имеет время жизни 'sess в аннотации типа, а Session - нет.

вызывает аналогичные ошибки компилятора, связанные со временем жизни.

Один из способов его решения очень простым образом - объявить Session снаружи в вызывающем, а затем для аннотации ссылки в структуре со временем жизни, подобный ответ в , этот пост Форума пользователя Rust говорит об одной и той же проблеме при инкапсуляции SFTP. Это не будет выглядеть элегантно и может не всегда применяться - потому что теперь у вас есть два объекта для работы, а не тот, который вам нужен!

Выключает арендованный ящик или owning_ref crate из другого ответа также являются решениями для этой проблемы. Рассмотрим owning_ref, который имеет специальный объект для этой цели: OwningHandle . Чтобы избежать перемещения основного объекта, мы выделяем его в куче, используя Box, что дает нам следующее возможное решение:

use ssh2::{Channel, Error, Session};
use std::net::TcpStream;

use owning_ref::OwningHandle;

struct DeviceSSHConnection {
    tcp: TcpStream,
    channel: OwningHandle, Box>>,
}

impl DeviceSSHConnection {
    fn new(targ: &str, c_user: &str, c_pass: &str) -> Self {
        use std::net::TcpStream;
        let mut session = Session::new().unwrap();
        let mut tcp = TcpStream::connect(targ).unwrap();

        session.handshake(&tcp).unwrap();
        session.set_timeout(5000);
        session.userauth_password(c_user, c_pass).unwrap();

        let mut sess = Box::new(session);
        let mut oref = OwningHandle::new_with_fn(
            sess,
            unsafe { |x| Box::new((*x).channel_session().unwrap()) },
        );

        oref.shell().unwrap();
        let ret = DeviceSSHConnection {
            tcp: tcp,
            channel: oref,
        };
        ret
    }
}

. Результатом этого кода является то, что мы не можем использовать Session, но он сохраняется вместе с Channel, который мы будем использовать. Поскольку OwningHandle вызывает раздел Box, который разделяет Channel, когда он хранится в структуре, мы называем его как таковой. ПРИМЕЧАНИЕ. Это только мое понимание. У меня есть подозрение, что это может быть неверно, поскольку оно, по-видимому, очень близко к обсуждению OwningHandle небезопасности .

. Любопытная деталь здесь заключается в том, что Session логически имеет аналогичную связь с TcpStream, поскольку Channel имеет значение Session, но его собственность не принимается и нет аннотаций типа вокруг так. Вместо этого пользователь должен позаботиться об этом, поскольку в документации к методу рукопожатия говорится:

Этот сеанс не имеет права собственности на предоставленный сокет, рекомендуется, чтобы сокет сохранял время жизни этого сеанса, чтобы убедиться, что связь выполнена правильно.

Также настоятельно рекомендуется, чтобы предоставленный поток не использовался одновременно в другом месте в течение всего сеанса в качестве это может помешать протоколу.

blockquote>

Таким образом, использование TcpStream полностью зависит от программиста, чтобы обеспечить правильность кода. С OwningHandle внимание к тому, где происходит «опасная магия», выполняется с помощью блока unsafe {}.

Дальнейшее и более высокоуровневое обсуждение этой проблемы находится в этом Rust User's Forum - который включает в себя другой пример и его решение с использованием ящика для аренды, который не содержит небезопасных блоков.

26
задан Torsten Marek 26 September 2008 в 16:52
поделиться

10 ответов

Функции сравнения документа в Word 2003 чрезвычайно плохи, и часто приводит к пользователю, удаляющему части документов, которые они не хотели также

, единственный рациональный выбор состоит в том, чтобы использовать другое программное обеспечение. Существует множество текстового программного обеспечения сравнения на рынке, но сделать это в рамках Word, самый простой ответ должен обновить до Word 2007 или более поздних версий

От версии 2007 Word, которую ленточная команда "Review" и "Compare" легка найти, и управлять обоснованно, очевидно. И у них есть хорошее четкое расположение объединенных изменений, и прежде и после документов

, маленькая стоимость обновления будет определенно стоить рассмотреть время, которое Вы потратите впустую, в 2003 выдерживают сравнение, и потенциальный ущерб к Вашим документам, которые это могло вызвать

Любые предположения другими, что можно использовать сравнить функции, в 2003 вредно, и не хорошо продумал, учитывая долгосрочные последствия частей документов, тихо удаляемых

-2
ответ дан TFD 15 October 2019 в 07:36
поделиться

Используйте эту опцию в Word 2003:

Tools | Выдерживают сравнение и Слияние Documents

Или это в Word 2007:

Review | Co m чистит

, Это предлагает Вам файл, с которым можно сравнить файл, который Вы редактируете.

35
ответ дан Nathan Fellman 15 October 2019 в 07:36
поделиться

Я использую TortoiseMerge с , плагин xdocdiff для сравнения Word, Excel, PowerPoint и PDF присвоил версию файлам

10
ответ дан CMS 15 October 2019 в 07:36
поделиться

Если Вы имеете Вне всякого сравнения, Вы можете разность два документа слова с помощью некоторых правил, что необходимо загрузить с сайта и плагина разработчика. Это тогда даст Вам только для текста (не форматируя) представление (с небольшим количеством мусора формата слова, который можно проигнорировать. Различия будут выделены и легки найти.

я сделал примечание по тому, как сделать это здесь . Это говорит о Excel, но существует правило для Word в том же месте.

, Если Вы не имеете Вне всякого сравнения..., покупают его! Наиболее рекомендуемый.. Я боролся бы без него.

5
ответ дан Gishu 15 October 2019 в 07:36
поделиться

Codejacked покрывает три различных метода о том, как сравнить документы слова.

3
ответ дан Swati 15 October 2019 в 07:36
поделиться

Вы используете неправильные инструменты. В ходе моего последнего главного проекта нам удалось убедить всю команду перемещаться в схему Wiki. Мало того, что это делало изменения отслеживания быстрее и легче, но это помогло организовать информацию лучше. Вместо того, чтобы иметь необходимость отслеживать произвольные индексы в документе крупного текста, гиперссылки были доступны между документами.

Это означало, что документы могли естественно вытекать из высокого уровня к специфическим особенностям. Реализация таких спецификаций была невероятно легка по сравнению с документами в формате Word. Кроме того, то, что документы были в центральной части, гарантировало, что никто все еще не работал от устаревшего копия, которую они сохранили к их жесткому диску.

я знаю, что может быть некоторое внутреннее сопротивление перемещению в новые направления. Но если можно убедить коллег, что они должны быть дальновидными и всегда сложными сами, они дадут ему выстрел и станут правоверными в два счета.:-)

3
ответ дан 64BitBob 15 October 2019 в 07:36
поделиться

Около "материала" изменений дорожки существует также опция сравнить документы, я верю.

2
ответ дан Thomas 15 October 2019 в 07:36
поделиться

Я не знаю, как сравнить файлы индивидуально, так как они являются двоичными, но как насчет того, чтобы делать программу, которая говорит с MS Word, копируя содержание файлов к чистому текстовому файлу? Тогда Вы могли сравнить файлы простого текста.

1
ответ дан André Chalella 15 October 2019 в 07:36
поделиться

Versionate мог бы добиться цели.

0
ответ дан Terhorst 15 October 2019 в 07:36
поделиться

Если форматирование является базовым, можно использовать инструмент, который выгружает документ в обычный текстовый файл, а затем использовать diff , как любой другой.

1
ответ дан 28 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: