Относительный путь к методу File.ReadAllLines - PullRequest
0 голосов
/ 15 марта 2011

Мой код обращается к файлу, который находится в каталоге "Conf" внутри каталога моего проекта. В настоящее время я открываю файл, используя абсолютный путь, как показано ниже:

File.ReadAllLines("C:\project name\Conf\filename");

Я подумал, можно ли использовать относительный путь, например

File.ReadAllLines("/Conf/filename");

Но это не работает; как и ожидалось, это исключение. Я проверил MSDN (ссылка ниже), но, похоже, что методы ReadAllLines () не принимают относительный путь.

http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx

Любая идея, как я могу использовать относительный путь вместо того, чтобы использовать абсолютный путь?

Спасибо, Рахул

Ответы [ 3 ]

1 голос
/ 25 января 2014

Это мой любимый способ сделать это.

  1. Сделайте ваш файл встроенным ресурсом.

        /// <summary>
        /// This class must be in the same folder as the embedded resource
        /// </summary>
    public class GetResources
    {       
        private static readonly Type _type = typeof(GetResources);
    
        public static string Get(string fileName)
        {
            using (var stream = 
            _type.Assembly.GetManifestResourceStream
           (_type.Namespace + "." + fileName))
            {
                if (stream != null)
                    using (var reader = new StreamReader(stream))
                    {
                        return reader.ReadToEnd();
                    }
            }
            throw new FileNotFoundException(fileName);
        }
     }
    
1 голос
/ 23 июня 2011

Как указано в MSDN, вы не можете использовать относительный путь, однако вы можете использовать либо Environment.CurrentDirectory, либо System.Reflection.Assembly.GetExecutingAssembly().Location

0 голосов
/ 10 декабря 2015

Чтобы упростить задачу, используйте следующее:

string current_path = System.IO.Path.GetDirectoryName(Application.ExecutablePath);

string[] lines_from_file = System.IO.File.ReadAllLines(current_path + "/Conf/filename");

...additional black magic here...
...