W jaki sposób użytkownicy zazwyczaj usuwają pliki w systemie operacyjnym Linux? Myślę o użyciu wywołania funkcji unlink
, ale zastanawiam się, czy masz lepszy pomysł, ponieważ standard C++ nie wspomina o operacji usuwania plików i zależy od systemu.Usunięcie pliku w C++ pod UNIX
Odpowiedz
Yep - standard C++ pozostawia te rzeczy systemowi operacyjnemu, więc jeśli używasz Linuksa (lub dowolnego systemu POSIX), masz tylko unlink()
.
Standard C zapewnia remove()
, który można wypróbować, ale należy pamiętać, że jego behavior is unspecified dla czegokolwiek innego niż "zwykły plik", więc tak naprawdę nie chroni przed wejściem w szczegóły systemu plików specyficzne dla platformy (linki itp.).
Jeśli chcesz czegoś wyższego poziomu, bardziej wytrzymałego i bardziej przenośnego, sprawdź Boost Filesystem.
Rozłączenie jest prawidłowym sposobem.
Standard zawiera funkcję o nazwie remove, która to robi. Chociaż wolałbym, aby to było boost.filesystem
(jeśli już i tak używam doładowania).
#include <cstdio>
int main() {
std::remove("/home/js/file.txt");
}
unlink()
jest określona przez normy POSIX, a więc będzie istnieć w każdym systemie zgodnym z POSIX, oraz sporo, które nie są zbyt zgodne POSIX.
Pamiętaj, że najnowsze jądra oferują także unlinkat
. Ta funkcja jest szybsza niż unlink
, jeśli posiadasz deskryptor pliku w samym katalogu.
Używam remove() w całym moim kodzie - możliwość przenoszenia jest ważna dla niektórych z nas. –
remove jest w rzeczywistości określone w POSIX, aby było równoważne rozłączeniu dla nie-katalogów. – Random832