Если Вы пишете Средства управления UI (ASPX, WinForms, WPF...) необходимо постараться не выдавать исключения в конструкторе, потому что разработчик (Visual Studio) не может обработать их, когда это создает средства управления. Знайте свой жизненный цикл управления (события управления) и используйте ленивую инициализацию по мере возможности.
Я бы не стал считать это решение простым , но вы можете сделать следующее:
import os
d = os.path.normcase('C:\\StackOverFlow')
files = os.listdir(os.path.dirname(d))
for f in files:
if not d.endswith(f.lower()):
continue
else
real_d = os.path.join(os.path.dirname(d), f)
Это, вероятно, неэффективно (в зависимости от количества файлов в каталоге) . Требуется настройка компонентов пути (мое решение действительно исправляет только регистр имени файла и не заботится об именах каталогов). Также, возможно, os.walk
может оказаться полезным для спуска по дереву.
Подход грязного взлома,
import glob
...
if os.path.exists(d):
d_real = glob.glob(d + '*')[0][:len(d)]
Определенно некрасиво, но забавно:
def getRealDirPath(path):
try:
open(path)
except IOError, e:
return str(e).split("'")[-2]
Конечно:
Но все же может быть полезным если он вам не нужен для кода типа «жизнь или смерть».
Пытался использовать стандартную библиотеку с помощью grep, чтобы найти, как они нашли реальный путь, но не смогли его найти. Должно быть в C.
Это был грязный прием дня, в следующий раз мы будем использовать регулярное выражение в stacktrace только потому, что мы можем: -)