c - 尝试删除文件时获取权限被拒绝错误

标签 c windows delete-file access-denied file-in-use

首先大家好

我的问题是,我的程序创建了一个文件,该文件被另一个程序读取,之后我的程序应该删除该文件。

我使用下面的代码来检查文件是否存在以及是否有任何其他程序使用该文件。之后我想删除文件:

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;
}

最佳答案

这似乎是有问题的行(假定这是来自 int main(int argc, char **argv) 的片段:

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

在这里,您将程序可执行文件分配给 filePath,但不是程序的第一个参数。第一个参数在 argv[1] 中,但您必须首先检查 argc >= 2

当您尝试通过静态路径条目删除文件时,您必须使用第二个 \ 转义字符串中的 \ 符号:

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

关于c - 尝试删除文件时获取权限被拒绝错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41442959/

相关文章:

c - 如何让这个简单的 C 程序重新开始?

c - C编译器中的类型转换

c - 最近在 C 中进行高效的集合成员测试以进行重复数据删除?

windows - IMFSourceReader::GetNativeMediaType 是否等同于 IMFMediaTypeHandler::GetMediaTypeByIndex?

powershell - 删除早于 xx 天的文件

java - 递归删除导致栈溢出错误

c - 如何在 C 中的进程之间共享一个带有指针的结构?

C++ 识别像素中的二级和三级显示器

windows - cargo 登记更新总是失败

java - java删除文件后如何释放资源?