Saltar al contenido

Obtener la ruta a la carpeta principal del archivo de solución usando C#

Este team de redactores ha estado largas horas investigando la resolución a tu pregunta, te dejamos la solución y esperamos resultarte de gran ayuda.

Solución:

Prueba esto:

string startupPath = Path.Combine(Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName,"abc.txt");

// Read the file as one string. 
string text = System.IO.File.ReadAllText(startupPath);

Puede disfrutar de esta solución más general que depende de encontrar la solución *.sln archivo escaneando todos los directorios principales desde el actual o el seleccionado mientras cubre el caso de no encontrar el directorio de la solución.

public static class VisualStudioProvider

    public static DirectoryInfo TryGetSolutionDirectoryInfo(string currentPath = null)
    
        var directory = new DirectoryInfo(
            currentPath ?? Directory.GetCurrentDirectory());
        while (directory != null && !directory.GetFiles("*.sln").Any())
        
            directory = directory.Parent;
        
        return directory;
    

Uso:

// get directory
var directory = VisualStudioProvider.TryGetSolutionDirectoryInfo();
// if directory found
if (directory != null)

    Console.WriteLine(directory.FullName);

En tu caso:

// resolve file path
var filePath = Path.Combine(
    VisualStudioProvider.TryGetSolutionDirectoryInfo()
    .Parent.FullName, 
    "filename.ext");
// usage file
StreamReader reader = new StreamReader(filePath);

¡Disfrutar!

Ahora, una advertencia … Su aplicación debe ser independiente de la solución, a menos que este sea un proyecto personal para alguna herramienta de procesamiento de soluciones, no me importaría. Entienda que, su aplicación una vez distribuida a los usuarios voluntad residir en una carpeta sin la solución. Ahora, puede usar un archivo “ancla”. Por ejemplo, busque carpetas principales como lo hice yo y verifique la existencia de un archivo vacío app.anchor o mySuperSpecificFileNameToRead.ext ;P Si quieres que escriba el método que puedo, solo házmelo saber.

¡Ahora, usted puede realmente disfrutar! 😀

Creo que sería negligente si su aplicación se basara en la ubicación de un archivo en función de la relación entre la ruta del archivo y la ruta de la solución. Si bien es posible que su programa se esté ejecutando en Solution/Project/Bin/$(ConfigurationName)/$(TargetFileName), que solo funciona cuando ejecuta desde dentro de los límites de Visual Studio. Fuera de Visual Studio, en otros escenarios, este no es necesariamente el caso.

Veo dos opciones:

  1. Incluya el archivo como parte de su proyecto y, en sus propiedades, cópielo en la carpeta de salida. A continuación, puede acceder al archivo de esta manera:

    string filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Yourfile.txt");
    

    Tenga en cuenta que durante la implementación deberá asegurarse de que este archivo también se implemente junto con su ejecutable.

  2. Utilice argumentos de la línea de comandos para especificar la ruta absoluta al archivo al inicio. Esto se puede establecer de forma predeterminada en Visual Studio (consulte Propiedades del proyecto -> Pestaña Depurar -> Argumentos de la línea de comandos). Por ejemplo:

    filePath="C:myDevFoldermyFile.txt"
    

    Hay varias formas y bibliotecas relacionadas con el análisis de la línea de comando. Aquí hay una respuesta de desbordamiento de pila sobre el análisis de argumentos de línea de comando.

Si piensas que ha sido de provecho este post, nos gustaría que lo compartas con más entusiastas de la programación y nos ayudes a dar difusión a nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *