CreateFile返回值为INVALID_HANDLE_VALUE问题

《1》。85……85 2024-07-26 09:20:41

 

error没有错误提示,求大佬帮忙解答

...全文
1079 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41871293 2025-01-24
  • 打赏
  • 举报
回复

在使用 CreateFile 函数时,如果返回值为 INVALID_HANDLE_VALUE,这通常意味着函数调用失败。以下是一些可能导致此错误的原因以及相应的解决方法:

一、常见原因及解决办法

  1. 文件路径问题
    • 如果是在Windows系统下,路径的格式必须正确。例如,当使用相对路径时,要确保相对的起始点是正确的。如果是绝对路径,要注意盘符的正确性以及路径中的分隔符。在C/C++ 中,反斜杠 \ 是转义字符,所以如果要表示路径中的反斜杠,需要使用双反斜杠 \\。比如要打开 C:\test.txt 这个文件,在代码中应该写成 "C:\\test.txt"
    • 对于网络路径,要确保网络连接正常,并且具有访问该网络资源的权限。

配图


2. 文件权限问题

  • 当以特定的访问模式(如写入模式)打开文件时,如果没有足够的权限,就会失败。例如,在某些系统中,普通用户可能无法对系统文件进行写入操作。如果是这种情况,可以尝试以管理员身份运行程序(在Windows系统下),或者调整文件的权限设置。
  • 如果只是想打开一个已存在的文件进行读取操作,但是指定的访问权限包含了写入权限,并且文件所在的文件夹没有写入权限,也可能导致失败。此时应该只指定必要的访问权限,如 GENERIC_READ
  1. 文件不存在(当要求必须存在时)
    • 如果使用 OPEN_EXISTING 标志打开文件,并且文件实际上不存在,就会返回 INVALID_HANDLE_VALUE。如果希望在文件不存在时创建它,可以使用 CREATE_ALWAYSCREATE_NEW 标志(根据需求选择)。

配图


二、推荐的书籍

  1. 《Windows核心编程》(作者:Jeffrey Richter)

    • 内容特点
      • 这本书深入讲解了Windows操作系统的内核机制,包括进程、线程、内存管理、文件系统等方面的知识。对于理解 CreateFile 函数背后的系统原理非常有帮助。书中包含了大量的代码示例,通过实际的代码演示如何正确地进行系统级编程操作,如文件的创建、打开、读写等操作。
      • 它涵盖了从基本的Windows API使用到高级的性能优化和多线程并发处理的技巧。
    • 优点
      • 内容全面且深入,是一本Windows编程领域的经典著作。作者经验丰富,讲解清晰透彻,无论是初学者想要深入了解Windows编程,还是有一定经验的程序员想要提升自己的技能都非常适用。

        配图

    • 缺点
      • 由于内容较为深入和广泛,对于完全没有Windows编程基础的读者来说可能会有些吃力,需要花费一定的时间来理解一些基本概念。
  2. 《C++ Primer Plus》(作者:Stephen Prata)

    • 内容特点
      • 这是一本全面的C++ 教程书籍,虽然不是专门针对Windows API的,但它详细讲解了C++ 的语法、面向对象编程、标准模板库等内容。由于 CreateFile 函数在C++ 中也可以使用,掌握好C++ 的基础知识有助于更好地理解和运用这个函数。书中包含了许多实用的示例代码,可以帮助读者理解如何在实际的C++ 项目中处理文件操作等相关任务。
    • 优点
      • 对于C++ 初学者来说是一本非常好的入门书籍,讲解循序渐进,容易理解。它的示例代码丰富且具有代表性,能够帮助读者快速掌握C++ 的核心概念。
    • 缺点
      • 对于只想深入了解Windows API特定功能(如 CreateFile 函数的高级用法)的读者来说,可能会觉得书中部分内容过于基础和宽泛。
  3. 《Windows程序设计》(作者:Charles Petzold)

    • 内容特点
      • 专注于Windows程序设计的各个方面,详细介绍了Windows API的使用。对于 CreateFile 函数,它会从函数的原型、参数含义、返回值处理等多个方面进行讲解,并且会结合实际的Windows窗口程序开发场景,展示如何在不同的应用场景下正确使用这个函数。
    • 优点
      • 是Windows程序设计的经典教材,对Windows API的讲解非常细致,书中还包含了很多关于Windows图形界面设计与文件操作结合的示例,有助于读者全面理解Windows程序开发中的文件操作流程。
    • 缺点
      • 随着Windows操作系统的发展,一些内容可能需要结合最新的文档进行补充学习,但总体上仍然是一本非常有价值的书籍。
推荐书籍图书特点
《Windows核心编程》作者:Jeffrey Richter,出版社:Microsoft Press,深入讲解Windows内核机制,包含大量代码示例,涵盖进程、线程等多方面知识,适合深入学习Windows编程
《C++ Primer Plus》作者:Stephen Prata,出版社:Sams Publishing,全面的C++ 教程,包含语法、面向对象编程等内容,有助于理解C++ 中的文件操作相关知识,适合初学者入门
《Windows程序设计》作者:Charles Petzold,出版社:Microsoft Press,专注Windows程序设计,详细讲解Windows API,结合实例展示函数用法,适合学习Windows程序开发中的文件操作

已隐藏部分内容,更多查看原文

深东编程 2024-07-28
  • 打赏
  • 举报
回复

这种函数。注意路径是否正确。哪里是否有那个文件。一般来说:参数最好写(没有就创建一个)
你上面不是标注只打开存在的文件,如果不存在就会返回错误

steven_xb 2024-07-26
  • 打赏
  • 举报
回复

具体使用也很简单,

img

steven_xb 2024-07-26
  • 举报
回复
@steven_xb 加一个输入就好了,然后运行项目。也可以通过其他方式,这里就不多说了。
steven_xb 2024-07-26
  • 打赏
  • 举报
回复 1

CreateFile的第一个参数要放你要创建的文件的名称,看你代码的方式是通过外部命令的方式传入,但是你运行时没有传入名称

steven_xb 2024-07-26
  • 举报
回复
@steven_xb https://www.cnblogs.com/jisongxie/p/7892366.html main参数的使用可以参考一下这个
  • 举报
回复
@steven_xb 谢谢
forever74 2024-07-26
  • 打赏
  • 举报
回复 1

所以你的argv呢?存在否?

  • 举报
回复
@forever74 谢谢,已经完成了

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧