2016-03-27 44 views
1

Bir dosya tanıtıcısını (FILE * file) alan ve bu dosyadaki her şeyi kopyalayan bir işlev var. Şimdi, bu dosyanın içindeki her şeyi silmek mümkün mü?Dosya adı, dosya adı olmadan nasıl kurtulur?

Dosya ismim yok, bu yüzden fopen(filename, "w") tekrar kullanamıyorum.

stdio.h ve string.h ürünüm var.

+3

Reddetme konusunda hemfikir değilim. Bu ilginç bir konu. –

+0

'geri sar (fp); fprintf (fp, ""); – stackptr

+0

@stackptr: Gösterdiğiniz snippet, dosyanın başına hiçbir şey yazmaz. Tek bir bayt kısaltılmamış. – alk

cevap

7

Dosya tanımlayıcısını kullanarak dosyayı boşaltmak için ftruncate() sistem çağrısını kullanabilirsiniz.

ftruncate(fileno(fh), 0); 

Muhtemelen başka ziyade ofset önceki olduğundan daha başlangıçta yapılan dosyaya yazar, böylece rewind(fh) bir çağrı ile takip etmek isteyeceklerdir.

+0

'ftruncate()' unistd.h'de prototip oluşturulduğundan bahsedilmeye değer. – alk

+0

Sadece emin olmak için: unistd.h işlevini kullanmadan bir dosyayı silmek imkansızdır. –

+0

Stdio kullanarak bunu yapmanın bir kaç yolu varsa şaşırmam. Ama eğer varsa, bu yoldan çok daha az belirgin. – duskwuff