2017-01-03 5 views
1

Прежде всего привет всем,получить разрешение отказано ошибка при попытке удалить файл

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

Я использую следующий код ниже, чтобы проверить, существует ли файл, и если какая-либо другая программа использует этот файл. После этого я хочу удалить файл с помощью:

if(isFileRdy("C:\\test\\foo.txt"))remove("C:\\test\\foo.txt"); 

Есть ли у кого-нибудь идеи, где проблема может быть. Интересно, что это работает для других файлов. И foo.txt также создан этой программой без специальных прав доступа.

Спасибо :)

/* just suppose the things with argc and argv work, I know it's uggly 
    but I need it as a call back function later in the code */ 

BOOL isFileRdy(char *filePath) 
{ 
    int argc = 1; 
    void *argv[1]; 
    argv[0]= (void*) filePath; 
    return isFileRdyCBF(argv, argc); 
} 


BOOL isFileRdyCBF(void *argv[], int argc) 
{ 
/* I used */ 
    char *filePath = (char*) argv[0]; 
    FILE *fDes = NULL; 
    BOOL _fileExists = FALSE; 
    BOOL _fileBussy = TRUE; 

    _fileExists = fileExists(filePath); 

    if(_fileExists) 
    { 
     fDes = fopen(filePath, "a+"); 
     if(fDes!=NULL) 
     { 
      _fileBussy = FALSE; 
      if(fclose(fDes)!=0) 
      { 
       printf("\nERROR could not close file stream!"); 
       printf("\n  '%s'\n\n", filePath); 
       return FALSE; 
      } 
     } 
    } 

    return (_fileExists==TRUE && _fileBussy==FALSE) ? TRUE : FALSE; 
} 
+2

Полностью несвязанный с последующим кодом, первая, наиболее очевидная проблема - обратная косая черта в вашем жестком закодированном имени файла не сбрасывается. – WhozCraig

+2

\ имеет особое значение, и особенно если вы находитесь в платформе Windows. Не могли бы вы предоставить нам полный код вместе с ошибкой, с которой вы столкнулись? –

+1

Пример: 'remove (" C: \\ test \\ foo.txt ");' Это также должно работать: 'remove (" c: /test/foo.txt ");' –

ответ

2

Вы говорите, что это работает для других файлов. Как выглядят эти пути, которые работают на вас? Вся ваша проблема может заключаться в том, что вы не используете обратную косую черту \ правильно.

В С, \tmeans the tab character. Итак, вы написали C:<TAB>test. Чтобы на самом деле выразить символ обратной косой черты \ в C, вы пишете \\. (Это дело поставить обратную косую черту перед различными персонажами, чтобы выразить специальные коды, называется «побег».)

Например, вместо того, чтобы remove("C:\test\foo.txt"); можно было бы написать remove("C:\\test\\foo.txt");

Это также должно работать: remove("c:/test/foo.txt");, так как Windows, может также принять переднюю косую черту / вместо обратной косой черты \ в дорожках.

Также, что Rudi said о argv.

3

Это кажется проблематичным линии (учитывая, что это отрывок из int main(int argc, char **argv):.

char *filePath = (char*) argv[0]; 

Здесь вы задаете программу исполняемый файл Filepath, но не первый аргумент программы Первый параметр в argv[1], но вы должны проверить, что первый argc >= 2

при попытке удалить файл с помощью статического ввода пути, вы должны избежать \ -signs в строке со вторым \:.

remove("C:\\test\\foo.txt"); 
Смежные вопросы