我使用Visual 2017 C++ 和MFC
我在MFC中有一个程序,它将文件收集为string
,并将它们添加到zip
文件中。
我想添加一个错误检查,在尝试添加文件之前,我要检查它是否存在。如果它存在,完美的话,我会将文件添加到zip
中。如果没有,没有问题,我继续下一个文件。
我遇到了std::filesystem
(这里),我看到了我认为可以工作的两个不同的函数:is_regular_file()
(这里)和exists()
(这里)。
然而,我不知道这两种方法中的哪一种。我将是zipping
的文件类型从.txt
到.zip
各不相同,还有许多任意的文件类型。
从我的研究来看,它们似乎是相似的,它们都返回一个bool
值。
这两种功能有什么区别,哪一种更好呢?
此外,根据我的理解,这个库是相对较新的,可能不适合在MFC
中使用。这是真的吗?如果是的话,我还能用什么来检查给定的文件路径,该文件是否存在于计算机上?
提前谢谢你!
发布于 2022-08-04 09:43:49
Constant Meaning
none indicates that the file status has not been evaluated yet, or an error occurred when evaluating it
not_found indicates that the file was not found (this is not considered an error)
regular a regular file
directory a directory
symlink a symbolic link
block a block special file
character a character special file
fifo a FIFO (also known as pipe) file
socket a socket file
implementation-defined an additional implementation-defined constant for each additional file type supported by the implementation (e.g. MSVC STL defines junction for NTFS junctions)
unknown the file exists but its type could not be determined
因此,乍一看,文件系统::exists()将是您想要的。
但是您要将文件添加到ZIP存档中,而AFAICT,ZIP只支持常规文件、符号链接和目录,所以您应该使用这些文件。
您不会存档套接字或NTFS连接,即使它们存在并在命令行中提供。
澄清:
“常规文件”是指具有(a)由文件系统存储的数据和(b)没有文件系统分配给它的语义的文件--即文件系统不知道如何读取或操作该文件。
例如,MS文档是MS Word理解的东西,但是文件系统只知道它是一堆字节。
另一方面,符号链接是文件系统存储的东西,它知道如何操作(遵循链接)。
块特殊文件实际上不是由文件系统存储的,而是操作系统其他部分所操作的元数据。
ZIP存档或RAR是文件系统存储的文件。但是它不知道如何读取它们或对它们进行操作,所以它们是常规文件。
在旧的Windows资源管理器中,桌面上的“快捷方式”是文件系统存储的小文件,但是知道如何读取它们的是资源管理器--它们不是符号链接,而是常规文件。(也许情况仍然如此,我最近还没查过。)
https://stackoverflow.com/questions/73227898
复制相似问题