微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查Windows程序中是否存在C ++文件?

这是一个只有Windows的程序,所以便携式代码不是问题。

我只需要:

bool DoesFileExist( LPWSTR lpszFilename ) { // ... }

如何使文件系统caching失效?

在Java中检测符号链接

获取recursion包含在目录中的文件列表的最快方法是什么?

我怎样才能找出谁在Windows中使用.NET创build一个文件

如何列出目录树中的所有二进制文件扩展名?

如何调查一个过程在做什么?

用于WIndows的内存文件系统

* nix上的伪文件系统

使用O_DIRECT写入时,是否需要使无效caching读取?

我如何保存文件在ramdisk文件系统中闪存?

在Windows代码中有两种常用的方法。 GetFileAttributes和CreateFile,

bool DoesFileExist(LPCWSTR pszFilename) { DWORD dwAttrib = GetFileAttributes(pszFilename); if ( ! (dwAttrib & FILE_ATTRIBUTE_DEVICE) && ! (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) { return true; } return false; }

这会告诉你一个文件存在,但它不会告诉你是否有权访问它。 为此你需要使用CreateFile。

bool DoesFileExist(LPCWSTR pszFilename) { HANDLE hf = CreateFile(pszFilename,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_norMAL,NULL); if (INVALID_HANDLE_VALUE != hf) { CloseHandle(hf); return true; } else if (GetLastError() == ERROR_SHARING_VIOLATION) { // should we return 'exists but you can't access it' here? return true; } return false; }

但请记住,即使您从其中一个电话中恢复正常,当您打开电话时,该文件仍然可能不存在。 很多时候,最好只是像文件存在一样行事,并在没有的时候正常处理错误

据雷蒙德陈, 如果你迷信 ,你应该使用GetFileAttributes 。

检查C ++文件是否存在的最佳方法是什么? (跨平台)

使用_access或stat 。

这是一个复杂的问题。 没有100%的方法检查文件的存在。 所有你可以检查是真正的“一个文件我有一定的访问权限exstistence”。 对于非超级用户帐户,非常有可能存在一个您无法访问的文件,以便访问检查不会显示文件的存在情况。

例如。 可能无法访问特定的目录。 然后,没有办法确定该目录中的文件的存在。

这就是说,如果你想检查一个文件的存在,你有一个访问权限使用下列之一:_stat,_stat64,_stati64,_wstat,_wstat64,_wstati64

GetFileAttributes就是你要找的。 如果它返回的值不是INVALID_FILE_ATTRIBUTES,则该文件存在。

打开它。 您无法可靠地测试多任务操作系统上是否存在文件。 当你打开它,你可以确保它不会消失。

只有Windows? 使用GetFileAttributes :

bool DoesFileExist( LPWSTR lpszFilename ) { return GetFileAttributes( lpszFilename ) != INVALID_FILE_ATTRIBUTES; }

或者更严格的版本(根据Szere Dyeri的评论):

bool DoesFileExist( LPWSTR lpszFilename ) { return ( ( GetFileAttributes( lpszFilename ) != INVALID_FILE_ATTRIBUTES ) && ( GetLastError() == ERROR_FILE_NOT_FOUND ) ); }

这是许多选择之一:

HANDLE handle = FindFirstFile(lpszFilename); if (handle == INVALID_HANDLE_VALUE) return false; FindClose(handle); return true;

为此,我使用FindFirstFile / FindNextFile API函数

根据我的经验,_access()很简单,相当便于使用

#if defined(__MSDOS__) || defined(_Windows) || defined(_WIN32) bool file_exists = _access(file_name,0) == 0; #endif #ifdef unix bool file_exists = _access(file_name,F_OK) == 0; #endif

这应该做到这一点。

#include <fstream> bool DoesFileExist( LPWSTR lpszFilename ) { ifstream fin; fin.open(lpszFilename.c_str(),ifstream::in); fin.close(); return !fin.fail(); }

我通常使用boost :: filesystem。 有一个exists()函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐