todos - manejo de archivos en c++ fstream
¿Cómo puedo saber si una ruta determinada es un directorio o un archivo?(C/C++) (7)
Estoy usando C y a veces tengo que manejar rutas como
- C: / Whatever
- C: / Whatever /
- C: / Whatever / Somefile
¿Hay alguna forma de comprobar si una ruta dada es un directorio o una ruta dada es un archivo?
Con C ++ 14 / C ++ 17 puede usar la plataforma independiente is_directory()
y is_regular_file()
desde la biblioteca del sistema de archivos .
#include <filesystem> // C++17
#include <iostream>
namespace fs = std::filesystem;
int main()
{
const std::string pathString = "/my/path";
const fs::path path(pathString); // Constructing the path from a string is possible.
std::error_code ec; // For using the non-throwing overloads of functions below.
if (fs::is_directory(path, ec))
{
// Process a directory.
}
if (ec) // Optional handling of possible errors.
{
std::cerr << "Error in is_directory: " << ec.message();
}
if (fs::is_regular_file(path, ec))
{
// Process a regular file.
}
if (ec) // Optional handling of possible errors. Usage of the same ec object works since fs functions are calling ec.clear() if no errors occur.
{
std::cerr << "Error in is_regular_file: " << ec.message();
}
}
En C ++ 14, use std::experimental::filesystem
.
#include <experimental/filesystem> // C++14
namespace fs = std::experimental::filesystem;
Las verificaciones adicionales implementadas se enumeran en la sección "Tipos de archivos" .
En Win32, generalmente utilizo PathIsDirectory y sus funciones hermanas. Esto funciona en Windows 98, que GetFileAttributes no (de acuerdo con la documentación de MSDN).
En Windows, puede usar GetFileAttributes en un GetFileAttributes abierto .
Llame a GetFileAttributes y busque el atributo FILE_ATTRIBUTE_DIRECTORY.
Más fácil de probar FileInfo.isDir () en qt
Si usas CFile
, puedes probar
CFileStatus status;
if (CFile::GetStatus(fileName, status) && status.m_attribute == 0x10){
//it''s directory
}
stat () te dirá esto.
struct stat s;
if( stat(path,&s) == 0 )
{
if( s.st_mode & S_IFDIR )
{
//it''s a directory
}
else if( s.st_mode & S_IFREG )
{
//it''s a file
}
else
{
//something else
}
}
else
{
//error
}