1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
use OpenOptions;
use ;
use Path;
/** 2MB souborový buffer používaný pro zápis */
const BUFFER_SIZE: usize = 2 * 1024 * 1024;
/** 32KB velikost dávky používaná pro zápis do bufferu */
const BATCH_SIZE: usize = 32 * 1024;
const BATCH_SIZE_U64: u64 = BATCH_SIZE as u64; // Pro výpočty s u64
/// Přepíše obsah souboru nulami.
///
/// Tato funkce otevře soubor, zjistí jeho velikost a poté jej přepíše
/// nulovými bajty s využitím `BufWriteru` pro zvýšení výkonu.
/// Tato funkce je nyní zaměřena pouze na bezpečné přepsání dat.
///
/// Funkce je generická přes `P` a přijímá jakýkoli typ, který implementuje `AsRef<Path>`.
///
/// # Typové parametry
/// * `P`: Typ cesty k souboru, který musí implementovat `AsRef<Path>`.
///
/// # Argumenty
/// * `path`: Cesta k souboru, který má být přepsán nulami.
///
/// # Návratová hodnota
/// Vrací `Result<(), io::Error>`, kde `Ok(())` značí úspěch,
/// a `Err(io::Error)` značí chybu.
// --- Makro `wipe_and_delete!` ---
/// Makro pro bezpečné přepsání souboru nulami a jeho následné smazání.
///
/// Toto makro volá funkci `wipe_with_zeros` pro přepsání dat
/// a následně `std::fs::remove_file` pro smazání souboru.
/// Vrací `Result<(), io::Error>`.
///
/// # Příklady
/// ```
/// # use std::fs;
/// # use std::io;
/// # use std::path::Path;
/// # // Pro účely příkladu definujeme dummy funkci
/// # pub fn wipe_with_zeros<P: AsRef<Path>>(_path: P) -> io::Result<()> { Ok(()) }
/// # #[macro_export]
/// # macro_rules! wipe_and_delete {
/// # ($path:expr) => {{
/// # let path_ref = ($path).as_ref();
/// # $crate::wipe_with_zeros(path_ref)
/// # .and_then(|_| std::fs::remove_file(path_ref))
/// # }};
/// # }
/// # // Pro kompilaci příkladu s makrem potřebujeme dummy crate name
/// # #[allow(unused_imports)]
/// # use wipe_and_delete;
/// # #[macro_use]
/// # extern crate your_crate_name;
/// // Vytvoříme testovací soubor
/// let test_file = "my_secret_doc.txt";
/// fs::File::create(test_file).unwrap();
///
/// // Použijeme makro pro přepsání a smazání
/// match wipe_and_delete!(test_file) {
/// Ok(_) => println!("Soubor byl bezpečně přepsán a smazán."),
/// Err(e) => eprintln!("Chyba při mazání souboru: {}", e),
/// }
/// assert!(!Path::new(test_file).exists());
/// ```