【问题标题】:'fopen' returning NULL file pointer, even if the files is created using C'fopen' 返回 NULL 文件指针,即使文件是使用 C 创建的
【发布时间】:2014-03-10 16:55:42
【问题描述】:

我正在使用以下代码以写入模式打开文件:

FILE *pf = fopen("c:\\test.txt", "w");
if (NULL == pf)
{
    printf("File pointer is NULL");
}

有时文件被创建,我得到了正确的文件指针,但有时我得到日志“文件指针为空”,即使文件是在 C 驱动器上创建的。我该如何解决?

【问题讨论】:

  • 尝试打印strerror(errno),这可能会提示fopen 失败的原因。
  • 使用文件后必须fclose()
  • 您运行的是什么版本的 Windows?在驱动器的根目录中创建文件有点不寻常。通常,您希望在自己的用户文件夹中执行此操作以确保适当的权限。
  • 您需要管理员权限才能写入 C:\。您是否以管理员用户身份运行?
  • 我这对你有帮助。 stackoverflow.com/questions/230062/…

标签: c fopen null-pointer


【解决方案1】:

http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx:

空指针值表示错误。

在现代 Windows 中,在驱动器 C 的根目录上创建文件需要管理权限。

你能否在安全位置重现相同的行为,例如在 GetTempPath 函数返回的临时目录中?

如果发生错误,设置全局变量errno,可以使用 获取具体的错误信息。

检查“errno”值。它应该包含 EACCESEPERM 之类的内容。

你说:

...即使文件是在c盘创建的。

我猜这个文件是以前在管理员下成功运行的文件之一。检查创建时间戳。

【讨论】:

  • 哇。我很欣赏你指着 MSDN 上的 POSIX 功能手册的幽默感。
  • Andrejs,原始问题是特定于 Windows 的。
  • 目前看不到任何特定于 Windows 的内容。
  • 我得到 errno 为 '0' 但即使在此之后文件指针为 NULL 并且我验证了文件的时间戳,每次运行后都会创建它。仍然面临同样的问题,仅供参考,这个问题出现在 Windows 系统上
  • 嗯,在我的机器 (Win7) 上,当我尝试在 c:\\: FILE *pf = fopen("c:\\test.txt","w") 中创建文件时,errno 是 EACCES ; if(NULL == pf) { printf("文件指针为 NULL %d %s\n", errno, errno==EACCES?"EACCES":""); } 输出:文件指针为 NULL 13 EACCES
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多