1
33
打开两个文件
|
2
5
请参阅此问题: Best way to determine if two path reference to same file in C#
问题是关于C,但答案只是win32 api调用
|
3
5
使用kernel32.dll中的getfullpathname,这将为您提供文件的绝对路径。然后将它与使用简单字符串比较的其他路径进行比较 编辑:代码
上面的代码将为所有三种路径表示打印相同的路径。你可能想在那之后做一个不区分大小写的搜索 |
4
3
简单的字符串比较不足以比较路径是否相等。在Windows中,C:\foo\bar.txt和C:\temp\bar.txt很可能通过文件系统中的符号和硬链接指向完全相同的文件。 正确地比较路径实际上迫使您打开两个文件并比较低级句柄信息。任何其他方法都会产生不稳定的结果。 看看这篇关于这个主题的出色的博文。该代码是在VB中,但它是相当可移植的C/C++,因为他调用了大多数方法。 http://blogs.msdn.com/vbteam/archive/2008/09/22/to-compare-two-filenames-lucian-wischik.aspx |
5
3
如果您可以访问Boost库,请尝试
http://www.boost.org/doc/libs/1_53_0/libs/filesystem/doc/reference.html#equivalent
从文档中总结:返回
|
6
3
文件系统库
因为C++ 17,你可以使用
standard filesystem library
. 包括它使用
你要找的功能是
总结
documentation
:此函数采用两条路径作为参数,如果它们引用同一文件或目录,则返回true,否则返回false。还有一个
例子
输出:
在C++ 17之前使用文件系统
若要在C++ 17之前的版本中使用此库,必须在编译器中启用实验语言特性,并以这种方式包含库:
|
7
2
您需要做的是获得规范路径。 对于每个路径,您都要求文件系统转换为规范路径,或者为您提供唯一标识文件的标识符(如inode)。 然后比较规范路径或唯一标识符。 注: 不要试着自己找出圆锥形路径文件系统可以用符号链接等做一些不容易处理的事情,除非您非常熟悉文件系统。 |
8
2
基于以下方面的答案 GetFileInformationByHandle() ,这是代码。 注意:只有文件已经存在时,此操作才有效…
|
9
0
如果引用UNC或规范路径(即除本地路径以外的任何路径),则比较实际路径字符串不会产生准确的结果。 shlwapi.h有一些 Path Functions 如果你的道路是相同的,这可能会对你有用。 它包含如下函数 PathIsRoot 可以在更大范围的函数中使用。 |
10
0
打开两个文件并使用
|
11
-1
如果文件存在,并且您可以处理打开文件时可能遇到的竞争条件和性能问题,那么在任何平台上都可以使用的一个不完美的解决方案是打开一个文件进行自己的写入,关闭它,然后在打开另一个文件进行写入后再次打开它进行写入。因为写访问权限只能是独占的,如果您能够第一次打开第一个文件进行写操作,而不是第二次打开,那么当您试图打开这两个文件时,很可能会阻止自己的请求。 (当然,也有可能系统的其他部分打开了一个文件) |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |