txt todos texto otro mover manejo los leer guardar ejemplos directorios directorio datos crear consola como comandos carpeta basicos archivos archivo c++ c winapi

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).




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 }