Utilizando C++, necesito detectar si la ruta de acceso (nombre de archivo) es absoluta o relativa. Puedo usar la API de Windows, pero no quiero usar bibliotecas de terceros como Boost, ya que necesito esta solución en una pequeña aplicación de Windows sin dependencias experimentales.Detecta si la ruta es absoluta o relativa
Respuesta
La API de Windows tiene PathIsRelative
. Se define como:
BOOL PathIsRelative(
_In_ LPCTSTR lpszPath
);
Hmm. Lol'd un poco. –
@LightnessRacesinOrbit: Aunque funcionaría en el 99% de los casos, no es una solución perfecta. Aquí hay dos razones principales por las cuales: 1. Técnicamente debería haber tres opciones de devolución: 'yes',' no', y 'error determination'. 2. Esta limitación: 'longitud máxima MAX_PATH'. Lamentablemente, no encontré una API de Windows que pudiera hacer esto de manera confiable ... – ahmd0
Comenzando con C++ 14/C++ 17 puede utilizar is_absolute()
y is_relative()
de la filesystem library
#include <filesystem> // C++17 (or Microsoft-specific implementation in C++14)
std::string winPathString = "C:/tmp";
std::filesystem::path path(winPathString); // Construct the path from a string.
if (path.is_absolute()) {
// Arriving here if winPathString = "C:/tmp".
}
if (path.is_relative()) {
// Arriving here if winPathString = "".
// Arriving here if winPathString = "tmp".
// Arriving here in windows if winPathString = "/tmp". (see quote below)
}
La trayectoria "/" es absoluta en una POSIX OS, pero es relativo en Windows.
En C++ 14 uso std::experimental::filesystem
#include <experimental/filesystem> // C++14
std::experimental::filesystem::path path(winPathString); // Construct the path from a string.
I tienen impulsar 1,63 y VS2010 (C++ pre C++ 11), y funciona el código siguiente.
std::filesystem::path path(winPathString); // Construct the path from a string.
if (path.is_absolute()) {
// Arriving here if winPathString = "C:/tmp".
}
- 1. Compruebe si una ruta es absoluta o relativa
- 2. Ruta absoluta y ruta relativa
- 3. ruta absoluta relativa perl
- 4. utiliza una ruta absoluta o relativa?
- 5. Cómo comprobar si la ruta es relativa o absoluta en java
- 6. URL absoluta de la ruta relativa
- 7. Win32 API para determinar si una ruta es relativa o absoluta?
- 8. Cómo convertir ruta relativa a la ruta absoluta en Unix
- 9. Ruta relativa a la ruta absoluta en VB.NET
- 10. Ruta relativa a la ruta absoluta en Elisp
- 11. Ruta relativa a la ruta absoluta en C#?
- 12. Ruta de absoluta a relativa (Eclipse, JSP)
- 13. Ruta de archivo absoluta a URL relativa
- 14. ¿Cómo comprobar si una ruta es una ruta absoluta o relativa en una plataforma cruzada con Python?
- 15. Obtener URL absoluta de la ruta relativa (método refactorizado)
- 16. Determine si una URL es absoluta o relativa a partir de vb
- 17. Ruta absoluta de regreso a la ruta relativa a la web
- 18. Convierta la ruta absoluta a la ruta relativa en el archivo por lotes
- 19. determinar si una cadena es URL absoluta o URL relativa en java
- 20. ¿Cómo convertir la ruta absoluta a la ruta relativa en PowerShell?
- 21. ¿Cómo obtener la ruta absoluta del archivo desde la ruta base y relativa que contiene ".."?
- 22. Cómo quitar la base de una ruta absoluta para obtener una ruta relativa?
- 23. ¿Cómo obtener la ruta absoluta para una ruta relativa dada programáticamente en Linux?
- 24. ¿Existe un método en C# para obtener la ruta relativa dado dos entradas de ruta absoluta?
- 25. En un archivo MAKE, ¿cómo obtener la ruta relativa de una ruta absoluta a otra?
- 26. Makefile: amplíe la ruta PREFIX relativa
- 27. Convierta la posición absoluta en relativa
- 28. Detecta si la dirección IP pública es dinámica o estática
- 29. ¿Cómo concatenar una ruta absoluta y una ruta relativa con QDir?
- 30. ¿El puntero C/C++ guarda la dirección de memoria absoluta, o relativa a la aplicación, o relativa al módulo?
Felicitaciones por [no poner mucho esfuerzo en su investigación] (http://msdn.microsoft.com/en-us/library/bb773660%28v=vs.85%29.aspx). –
@Tomalak Geret'kal - ¿Cuál es su pont en "no poner mucho esfuerzo"? De todos modos, el mismo enlace ya está publicado como respuesta, realmente aprecio tu esfuerzo, gracias amigo. –
@AlexFarber: Su punto es que una búsqueda en Google lo habría llevado al lugar correcto si lo hubiera intentado. –