Задать вопрос
vahe_2000
@vahe_2000

Rust WinApi и ReadDirectoryChangesW?

Здравствуйте я недавно начал изучать Rust, и хочу знать какой файл был добавлен или был удален в конкретном каталоге.нашел функции winapi::um::winbase::ReadDirectoryChangesW и захотелось реализовать его.

#[cfg(windows)]
extern crate winapi;

use std::ffi::CString;
extern crate schedule_recv;

use winapi::um::fileapi::{CreateFileA, OPEN_EXISTING};
use winapi::um::winbase::{ReadDirectoryChangesW, FILE_FLAG_BACKUP_SEMANTICS};

use winapi::um::winnt::{FILE_LIST_DIRECTORY, FILE_NOTIFY_CHANGE_FILE_NAME, FILE_SHARE_READ};

fn main() {
    unsafe {
        // ..
        let hDir = CreateFileA(
            CString::new("C:/Users/Admin/Desktop/tmp/")
                .unwrap()
                .as_ptr(),
            FILE_LIST_DIRECTORY,
            FILE_SHARE_READ,
            None.unwrap(),
            OPEN_EXISTING,
            FILE_FLAG_BACKUP_SEMANTICS,
            None.unwrap(),
        );
        let x = ReadDirectoryChangesW(
            hDir,
            std::ptr::null_mut(),
            0,
            0,
            FILE_NOTIFY_CHANGE_FILE_NAME,
            std::ptr::null_mut(),
            None.unwrap(),
            None.unwrap(),
        );
        // ...
    }
}

Ошибка.
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src\lib
core\option.rs:335:21
note: Run with `RUST_BACKTRACE=1` for a backtrace.
error: process didn't exit successfully: `target\debug\fw.exe` (exit code: 101)


заранее спасибо
  • Вопрос задан
  • 754 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
ozkriff
@ozkriff
Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
Падение наверняка из-за `None.unwrap()` происходит - это выражение вообще всегда будет вызывать панику, потому что смысл unwrap как раз в том и есть: развернуть значение, если оно Some, или грохнуть приложение.

Можно, например, https://habrahabr.ru/post/270371/ почитать.

------

Ну и да, задача стоит именно в том что бы самому такое реализовать? А то можно же что-то готовое уже взять. https://crates.io/crates/notify какой-нибудь, например.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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