2009-03-24 16 views
20

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

27

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.

+0

Używam remove() w całym moim kodzie - możliwość przenoszenia jest ważna dla niektórych z nas. –

+0

remove jest w rzeczywistości określone w POSIX, aby było równoważne rozłączeniu dla nie-katalogów. – Random832

1

Rozłączenie jest prawidłowym sposobem.

13

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"); 
} 
2

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.

0

Pamiętaj, że najnowsze jądra oferują także unlinkat. Ta funkcja jest szybsza niż unlink, jeśli posiadasz deskryptor pliku w samym katalogu.

Powiązane problemy