2015-05-28 8 views
-1

У меня есть редактор сценариев, который включает в себя вкладки. Каждая закладка имеет заголовок, который включает имя файла. У меня также есть следующий код:Проблема с получением абсолютного пути к файлу

string fileName = tabControl.SelectedTab.Text; 
string filePath = Path.GetFullPath(fileName); 

Приведенный выше код должен возвращать абсолютный путь fileName. Тем не менее, я понял, что он фактически возвращает абсолютный путь к редактору сценария .exe!

Почему это происходит? Я протестировал его и да, fileName действительно имеет имя файла корневого файла, так почему же Path.GetFullPath() не работает?

+1

Вам нужно указать нам значение 'filename'. –

+0

Я приведу пример приведенного выше кода: я работаю с моим редактором сценариев в файле с именем 'myprogram.c', который находится в каталоге' Documents', а мой редактор сценариев находится в папке внутри папки внутри ... у вас есть идея. Вместо того, чтобы получать 'PC/MyName/Documents', я получаю' PC/MyName/Documents/Folder/... (папки) .../script_editor.exe'. –

ответ

3

Вы должны хранить информацию об абсолютном пути файла - нет возможности построить его обратно на основе только имени файла.

Почему Path.GetFullPath(fileName) не работает: этот метод преобразует относительный путь к файлу в абсолютный на основе текущего рабочего каталога. Это место может измениться во время работы программы (т. Е. При использовании диалога открытия файла) и по умолчанию запускается в вашем каталоге файлов exe (что обычно не имеет никакого отношения к расположению ваших текстовых файлов).

+0

Хм, это объясняет, почему 'Path.GetFullPath' вернул абсолютный путь моего редактора скриптов. –

1

Он должен работать, если вы создаете объект FileInfo и используете FullName.

Ответ на шаткий поведение Path.GetFullPath, вероятно, лежит на MSDN, но только этот надрез поднимает красные флаги для меня:

файл или каталог, указанный путь не обязательно существует. Например, если c: \ temp \ newdir - это текущий каталог, вызов GetFullPath для имени файла, такого как test.txt, возвращает c: \ temp \ newdir \ test.txt. Файл не обязательно должен существовать.

+0

Что в этом хорошего? Где еще он получит путь, если вы его не предоставите? И что это за путь, который подразумевает, что файл с таким именем существует в файловой системе? – glenebob

+0

Я использовал это: 'FileInfo filePath = new FileInfo (fileName);' и проверить результаты с помощью этого: 'MessageBox.Show (filePath.FullName);', но похоже, что он делает то же самое, что и мой исходный код. Я сделал что-то не так? –

+0

Я бы проверил свойство 'Exists' информации о файле и' Directory.GetCurrentDirectory() ', чтобы узнать, что программа считает текущим рабочим каталогом. Вы пытаетесь сделать относительный путь, но кажется, что проблема заключается в том, что у вас нет четкой схемы между тем, где находится программа, и где находится файл. –