【问题标题】:Using MinGW how can I create a file without the read-only file attribute?使用 MinGW 如何创建没有只读文件属性的文件?
【发布时间】:2011-04-01 16:12:34
【问题描述】:

当我尝试覆盖现有文件时,我收到“权限被拒绝”错误。 我注意到创建的文件设置了“只读”属性。当我手动取消设置时,我可以覆盖文件。是否有一些我可以传递给 open() 的标志,它会在我创建文件时自动取消设置?

下面是一个简单的例子来说明这个问题。第一次运行有效,但第二次产生“权限被拒绝”错误。

谢谢, Zach(MingW/Windows 7 新手)

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>

int main(int argc, char ** argv) {
    int fid;
    double data = 12.0;

    if ( (fid = open("junk.data", O_WRONLY | O_CREAT | O_BINARY)) == -1 ) {
        printf("ERROR opening.\n\terror is:%s\n", strerror(errno));
        return 1;
    }

    write(fid, &data, sizeof(double));

    close(fid);

    return 0;
}

【问题讨论】:

    标签: c windows-7 mingw


    【解决方案1】:

    我尝试了 0644 和 S_IRUSR | S_IWUSR(包括 sys/stat.h)和任何一个都可以。

    确保您实际上将它作为 open 的第三个参数添加,而不是作为新术语添加到周围的括号中(就像我首先发生的那样,并且编译得很好)

    【讨论】:

    • 我很确定我已经尝试过了(作为第三个参数),但我想我一定是在使用旧版本的可执行文件进行测试。它现在似乎正在工作。 -谢谢
    【解决方案2】:

    open 有一个三参数变体:

    int open(const char *pathname, int flags, mode_t mode);
    

    第三个参数允许您在 Unix 类型的系统上指定模式位,但应该足以在 Windows 上设置最小的 r/w 权限。 (查看手册页了解详情。)

    【讨论】:

    • 感谢您的提示。我添加了 S_IRUSR | S_IWUSR,但没有骰子。
    • 嗯...抱歉。我敢肯定有没有win32调用的方法,但我现在不记得了。
    • 没问题。作为一个 kludge 我可以 system("rm filename").但是很高兴知道一种更合适的方法来处理这个问题。我的代码在 unix 上运行良好,但尝试在 windows 上运行有点学习曲线。
    • 使用unlink 函数稍微不那么笨拙。仍然不漂亮,并且与该顺序的任何内容一样,它很活泼(可以在 unlinkopen 调用之间重新创建文件)。
    • 我会试试的。在当前的用例中,种族歧视应该不是问题。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2010-09-16
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2011-12-16
    相关资源
    最近更新 更多