将<;windows.h>;和其他班级? 我学习C++,作为一个实践,我正在做一个非常基本的版本控制系统(非常非常基础)。

将<;windows.h>;和其他班级? 我学习C++,作为一个实践,我正在做一个非常基本的版本控制系统(非常非常基础)。,c++,winapi,C++,Winapi,我在Windows 10上工作,在gcc(MinGW.org gcc Build-20200227-1)9.2.0(-std=c++17)上工作 我一直在查看Microsoft文档,因为我正在使用。我已经能够实现一些有趣的事情,所以这个项目已经初具规模;但是,我目前正在尝试创建、写入和读取文件,这是我在使用之前所做的,但我也知道这可以通过函数来完成 所以。。。如果我使用CreateFile()函数创建文件,但使用流的ifstream/写入和读取其数据,该怎么办。这种做法不好吗?它会导致效率问题吗

我在Windows 10上工作,在gcc(MinGW.org gcc Build-20200227-1)9.2.0(-std=c++17)上工作

我一直在查看Microsoft文档,因为我正在使用
。我已经能够实现一些有趣的事情,所以这个项目已经初具规模;但是,我目前正在尝试创建、写入和读取文件,这是我在使用
之前所做的,但我也知道这可以通过
函数来完成

所以。。。如果我使用
CreateFile()
函数创建文件,但使用流的
ifstream
/
写入和读取其数据,该怎么办。这种做法不好吗?它会导致效率问题吗?一个比另一个好?没关系吧

好的,项目继续:)我混合了
用于创建文件和
用于读/写,但是,我很想知道这是推荐的,还是不好的做法


<>谢谢。

< P>最佳实践是坚持C++标准;也就是说,只在需要的范围内使用Windows特定的API调用

您不需要调用CreateFile(…)来写入文件,所以不需要。标准库的实现将是以Win32 API调用的方式进行的,不管怎样,如果不使用像CreateFile(…)这样的调用,就不会影响性能,因为您正在使用它,因为实现标准库的人所做的工作是可移植的


在所有条件相同的情况下,尽量将Win32的使用划分为特定的翻译单元(即cpp文件)。尽可能多地使用标准C++。您当前的项目可能永远不需要跨平台,也不需要与跨平台应用程序共享代码,但这些仍然是好习惯。故意使东西不可移植是没有用的。

如果你要用
读/写数据,那么你也应该用它来创建/打开文件。没有标准的方法将
CreateFile()
std:(i | o)fstream
类混合使用。但在Windows上,
std::(i | o)fstream
最终将在内部为您使用
CreateFile()
,因此无需直接使用
CreateFile()
,除非您确实需要微调其参数。在这种情况下,您可能不得不创建一个自定义的代码<代码>:ST::Basic文件FILEBUF 类,您可以将手册“代码>句柄< /代码>发送,然后可以将该类交给<代码> STD::(i o o)fStuts通常最好遵守标准C++(或像Boost的跨平台库)。而不是直接调用OS级API,除非所述库未提供所需的功能。特别是,如果您想从代码> CytFeFele中创建一个文件,您可以使用流来写或读,很有可能,C++流将足够您使用,并且<代码> CytFeFele函数将不需要。如果您使用C++ 17或更高版本编译器,您可以使用中的函数而不是操作系统特定的函数来处理文件。避免混合使用API。没有理由这样做。最有可能的是,标准实现依赖于Windows函数,但开销应该可以忽略不计。这对您的程序无害,唯一的问题是使用特定于操作系统的调用将使程序更难在其他操作系统中运行感谢您的回复!。是的,我知道我不需要创建文件来读/写文件。但是,我的应用程序碰巧创建了目录,并在每个新目录中添加了一个文本文件,它会立即在其中写入一些值。这就是为什么我将
CreateFile()
的write函数混合在一起,但是在阅读注释后,我修改了代码,使用
std::filesystem
库创建目录,我计划使用stream
类的
实例在目录中创建文本文件(并在其上写入)。“您不需要调用CreateFile(…)”-这只适用于从C++17开始的情况。在此之前,Windows上C++无法可靠地打开<代码> fStase<代码>。