yagami_md Ответов: 2

Файл не удаляется с


Я попытался удалить содержимое файла ...но не deletetd
unsigned char buffer[64];	// buffer may be any size
FILE *fp = fopen("image.pgm", "rb";);
FILE *pFile;
char *filename="text";
int ret;
int numread;
 pFile=fopen(filename,"wb");
while (!feof(fp))  // repeat until reached end of file

{
	
    int index;	// index into the buffer
    numread = fread(buffer, sizeof(unsigned char), 64, fp);
    if (numread == 0)
        break;  // no data left to read
    for (index = 0; index < numread; ++index)
    {
        // process each byte of the buffer
        char b = buffer[index];	// b contains the value of the current byte
        printf("byte %d: %c", index, b);
		fprintf(pFile,"%c",b);
    }
	fclose (pFile);
	ret = remove(filename);

   if(ret == 0) 
   {
      printf("\n File deleted successfully");
   }
   else 
   {
      printf("\n Error: unable to delete the file");
   }
}


Что я уже пробовал:

unsigned char buffer[64];	// buffer may be any size
FILE *fp = fopen(image.pgm,rb);
FILE *pFile;
char *filename="text";
int ret;
int numread;

pFile=fopen(filename,"wb");

while (!feof(fp))  // repeat until reached end of file
{
    int index;	// index into the buffer
    numread = fread(buffer, sizeof(unsigned char), 64, fp);
    if (numread == 0)
        break;  // no data left to read
    for (index = 0; index < numread; ++index)
    {
        // process each byte of the buffer
        char b = buffer[index];	// b contains the value of the current byte
        printf("byte %d: %c", index, b);
        fprintf(pFile,"%c";,b);
    }
	fclose (pFile);
	ret = remove(filename);

   if(ret == 0) 
   {
      printf("\n File deleted successfully");
   }
   else 
   {
      printf("\n Error: unable to delete the file");
   }

2 Ответов

Рейтинг:
7

OriginalGriff

Начните с выяснения, почему система не удалила его. remove возвращает -1, если у него есть проблема, и устанавливает errno с кодом ошибки, так что начните с того, что посмотрите на это: strerror[^] может помочь вам, преобразовав его в читаемую строку.

Когда вы знаете, почему, должно быть совершенно очевидно, в чем проблема.


Рейтинг:
15

Jochen Arndt

Вы пытаетесь удалить только что созданный файл (почему?).

Если это не удается, то файл, вероятно, не был создан (не существует).
Но вы этого не знаете, потому что не проверяете, было ли открытие успешным (pFile нет NULL).

Поэтому вы должны сначала проверить это (а также проверить, был ли открыт входной файл):

#include <errno.h> /* for perror() and/or errno */

FILE *fp = fopen(image.pgm,rb);
if (NULL == fp)
{
    perror("Failed to open input file");
    return;
}
char *filename = "text";
FILE pFile = fopen(filename,"wb");
if (NULL == pFile)
{
    perror("Failed to open output file");
    fclose(fp);
    return;
}
/* ... */
if (remove(filename))
{
    perror("Failed to delete output file");
    return;
}
</errno.h>


Возможной причиной сбоя являются недостаточные права доступа (вы не указали путь, по которому файл будет создан в текущем рабочем каталоге).


yagami_md

Я попробовал эту программу показать :
Нет такого файла или каталога

yagami_md

Не удалось удалить имя файла : отказано в разрешении

Jochen Arndt

Послание совершенно ясное:
У вас нет достаточных прав (привилегий) для удаления файла.

Проблема в том, что вы не указали путь, и только вы можете знать, какой путь на самом деле используется. Вы можете использовать getcwd () и распечатать его, чтобы узнать, где хранится ваш файл, и проверить разрешения.