2015-05-23 3 views
2

У меня есть файл, расположенный в каталоге решения, как это:Относительные пути каталогов в Visual Studio с помощью FSharp

enter image description here

Я хочу, чтобы прочитать содержимое одного из файлов .txt в строку в FSI:

open System.IO 

[<Literal>] 
let path = "../Data/Build_Keynote2014.txt" 

let buildKeynote = File.ReadAllText(path) 

проблема заключается в том, что он бросает исключение:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\jamie\AppData\Local\Data\Build_Keynote2014.txt'. 

Есть ли способ ссылаться на файл без использования полного пути?

Благодаря

+0

Правильно ли это путь? Если нет, то что? Вы взяли на себя правильную рабочую директорию? – PJTraill

+0

, конечно, но вы должны * копать * для этого - скорее всего, ваш код будет запущен в '/ bin/Debug', поэтому вам нужно сделать' ..' дважды (я думаю): 'let path =" ../ ../ Data/... "' - но вам должно быть легко проверить - он говорит вам * неправильный путь - должно быть очевидно, как его исправить (** btw **: вы очевидны на окнах , поэтому, возможно, вам следует использовать «\» вместо «/» в ваших путях) – Carsten

+0

@Carsten, косая черта отлично работает в Windows. –

ответ

3

После некоторых исследований я обнаружил this пост

let baseDirectory = __SOURCE_DIRECTORY__ 
let baseDirectory' = Directory.GetParent(baseDirectory) 
let filePath = "Data\Build_Keynote2014.txt" 
let fullPath = Path.Combine(baseDirectory'.FullName, filePath) 
let buildKeynote = File.ReadAllText(fullPath) 

работает как шарм. Спасибо всем, кто представил.

+1

Я также считаю, что удобно использовать 'System.Environment.CurrentDirectory <- System.IO.Path.Combine (__ SOURCE_DIRECTORY__, @ «bin \ Debug») ', чтобы обеспечить, чтобы моя среда repl была похожа на мою среду отладки. –