Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Неправильная работа "GetShortPathName"   Найти похожие ветки 

 
Piter ©   (2006-09-23 19:59) [0]

Столкнулся с необъяснимым фактом... У удаленного пользователя неправильно отрабатывает функция GetShortPathName. Вот такой путь к файлу:

F:\Music\Mus2\Pink Floyd\Tribute To Pink Floyd\London Philharmonic Orchestra - Plays The Music Of Pink Floyd\00. The London Philharmonic Orchestra - Plays The Music Of Pink Floyd.m3u

Почему-то преобразовывается в путь:

F:\Music\Mus2\Pink Floyd\TRIBUT~1\LONDON~1\00THEL~1.M3U

В результате, получается лажа какая-то... Почему "Pink Floyd" не преобразовался? Эта папка явно не соответствует стандарту 8:3.
С этим пробелом моя программа начинает сбоить.

Система: WinXP SP2, файловая система: NTFS.

Принимаются любые догадки и способы обхода проблемы.


 
Piter ©   (2006-09-23 20:04) [1]

при этом на своем компьютере я пытался эмулировать такую ситуацию... У меня все ок, данный путь (только с диском E:) у меня получается в виде:

"E:\Music\Mus2\PINKFL~1\TRIBUT~1\LONDON~1\00THEL~1.M3U"

что правильно...

Не могу ничего представить, кроме как ошибки в реализации функции GetShortPathName в системе у удаленного пользователя...

Само преобразование достаточно тривиально в программе:

LenS := GetShortPathName(PChar(FilePath), PChar(ShortFilePath), 0);
 SetLength(ShortFilePath, LenS);
 LenS := GetShortPathName(PChar(FilePath), PChar(ShortFilePath), LenS);
 SetLength(ShortFilePath, LenS);


 
Desdechado ©   (2006-09-23 20:09) [2]

а зачем эти махинации? не удобнее ли с длинными именами работать?


 
Alx2 ©   (2006-09-23 20:12) [3]

>Piter ©   (23.09.06 20:04)
В коде ошибки, возвращаемом функцией, подсказок нет?


 
Piter ©   (2006-09-23 20:27) [4]

Desdechado ©   (23.09.06 20:09) [2]
не удобнее ли с длинными именами работать?


при перехвате консольного вывода - не удобнее

Alx2 ©   (23.09.06 20:12) [3]
В коде ошибки, возвращаемом функцией, подсказок нет?


и какая функция по твоему возвращает ошибку?


 
Alx2 ©   (2006-09-23 20:31) [5]

>Piter ©   (23.09.06 20:27) [4]

Сам же писал:

>Принимаются любые догадки и способы обхода проблемы.

>и какая функция по твоему возвращает ошибку?

Вестимо, GetLastError?

Я задал вопрос, потому-что в MSDN не нашел никаких намеков на "особые случаи", кроме этого. Но ведь от чего-то отталкиваться надо? :)


 
default ©   (2006-09-23 20:32) [6]

щаз кто-нибудь придёт и на
> Принимаются любые догадки и способы обхода проблемы.

скажет - сумма не озвучена:):)


 
Kerk ©   (2006-09-23 20:33) [7]

Сумма не озвучена


 
Alx2 ©   (2006-09-23 20:35) [8]

>Kerk ©   (23.09.06 20:33)

>Сумма не озвучена

Напомнило описанных тобой чувашей  :)


 
Kerk ©   (2006-09-23 20:36) [9]

Удалено модератором


 
Kerk ©   (2006-09-23 20:42) [10]

Ох уж эти чуваши (с)
:)


 
Furyz ©   (2006-09-23 20:45) [11]

В таких основных функциях ошибок не бывает как правило , возможно разраотчику Pink Floyd как и мне не нравится


 
Piter ©   (2006-09-23 21:30) [12]

Alx2 ©   (23.09.06 20:31) [5]
Вестимо, GetLastError?


блин. GetLastError возвращает код ошибки, которая произошла в последней вызываемой функции в этом потоке. Но GetShortPathName отрабатывает нормально, она НЕ ВОЗВРАЩАЕТ ноль. Что вроде как очевидно из приведенного листинга программы и получающихся результатов...


 
Alx2 ©   (2006-09-23 22:02) [13]

>Piter ©   (23.09.06 21:30) [12]

Из результатов очевидно, что они некорректные. К сожалению, не могу воспроизвести описанную ситуацию - все вроде корректно отрабатывает. В качестве проверки "корректности отработки" пользовался старой доброй командой dir.

Еинственное, чем еще могу помочь - это то, что но нашел в инете нечто отдаленно похожее на твою проблему.
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_21995516.html


 
Alx2 ©   (2006-09-23 22:12) [14]

Со второго раза пойти по тому линку у меня не вышло - требует регистрации. Тем не менее, текст обсуждения сдернуть удалось.


 
Piter ©   (2006-09-23 22:19) [15]

Alx2 ©   (23.09.06 22:02) [13]
Из результатов очевидно, что они некорректные


но в тоже время очевидно, что результаты есть. ВСЕ подпапки отработаны нормально, а вот эта "Pink Floyd" осталась на месте :(

Остальные 2 поддиректории и имя файла приведены к формату 8:3


 
Alx2 ©   (2006-09-23 22:22) [16]

>Piter ©   (23.09.06 22:19) [15]

По линку не ходил? Может, что-то подобное и у тебя?


 
Piter ©   (2006-09-23 22:26) [17]

как я понял - там вся фишка в спец. кодах, которые при преобразовании заменяются на символы.

У меня, как видно из названия папки, никаких кодов нету.


 
guav ©   (2006-09-24 17:14) [18]

Вроде существует настройка, которая  отключает генерацию коротких имён на НТФС.


 
Piter ©   (2006-09-24 20:16) [19]

guav ©   (24.09.06 17:14) [18]

в смысле? И как это может помочь?


 
guav ©   (2006-09-24 20:27) [20]

> [19] Piter ©   (24.09.06 20:16)


в смысле - помочь ?
это предположение насчёт причины проблемы - короткое имя не было создано.


 
Piter ©   (2006-09-24 21:25) [21]

guav ©   (24.09.06 20:27) [20]
короткое имя не было создано


а-а-а... Понял! А отключать генерацию коротких имен можно для конкретной папки (а внутри папок, чтобы нет??

Тогда это вариант, спасибо!

Интересно, а где это отключение находится? Никогда ничего подобного не видел...


 
ИА   (2006-09-24 22:00) [22]

Посмотрите не затесалось ли в \Tribute To Pink Floyd\ русская буковка. GetShortPathName это вроде A а не W.

p.s. есть готовая обертка ExtractShortPathName от Борланда,но там тоже GetShortPathName.


 
guav ©   (2006-09-24 22:27) [23]

> А отключать генерацию коротких имен можно для конкретной
> папки (а внутри папок, чтобы нет??

Вроде, это глобальная настройка. http://www.google.com.ua/search?hl=ru&q=NtfsDisable8dot3NameCreation
Но, думаю, можно отключить генерацию коротких имён, создать папку Pink Floyd, и перед созданием подпапок опять включить.
Это всего лишь предположение, никогда не отключал генерацию коротких имён и не вызывал GetShortPathName.


 
Германн ©   (2006-09-25 00:02) [24]


> ИА   (24.09.06 22:00) [22]
>
> Посмотрите не затесалось ли в \Tribute To Pink Floyd\ русская
> буковка.

Точно. Наверняка какой-либо из пробелов или даже все три введены при русской раскладке...


 
Piter ©   (2006-09-25 15:33) [25]

Германн ©   (25.09.06 0:02) [24]
Наверняка какой-либо из пробелов или даже все три введены при русской раскладке


а что, пробелы в разных раскладках имеют разные коды?


 
guav ©   (2006-09-25 15:52) [26]


> [25] Piter ©   (25.09.06 15:33)

> а что, пробелы в разных раскладках имеют разные коды?

ага, отличаются в 17ом байте.


 
Германн ©   (2006-09-25 17:14) [27]


> а что, пробелы в разных раскладках имеют разные коды?

А ты думал нет?
У меня вот был ноутбук (сперли год назад пока я был в отпуске) так на нем аглицкие символы на клавишах были белые, а русские - красные. Так вот на клавишах со стрелками было по две стрелки! Одна белая, а другая красная!
...


 
Piter ©   (2006-09-25 18:16) [28]

вы такие шутники - просто пипец, чувство юмора прет из всех щелей. Я не удивлюсь, если окажется, что существует несколько типов пробелов.


 
clickmaker ©   (2006-09-25 18:20) [29]


> если окажется, что существует несколько типов пробелов

конечно. Длинный и короткий


 
Piter ©   (2006-09-25 19:03) [30]

а еще толстый и тонкий?


 
Плохиш ©   (2006-09-25 19:12) [31]


> Piter ©   (25.09.06 19:03) [30]
> а еще толстый и тонкий?

похихикай, похихикай. А получишь в Веб-сервисе $A0 и будешь удивляться, чёй-то прога не работает.


 
Marser ©   (2006-09-25 19:37) [32]

Удалено модератором


 
Piter ©   (2006-09-25 20:08) [33]

Плохиш ©   (25.09.06 19:12) [31]
похихикай, похихикай


Вот и я про это! Бесит блин, шутники все такие. Потом хрен отличишь где правда, где прикол.


 
Virgo_Style ©   (2006-09-25 20:10) [34]

не все же других бесить, приходится когда-то и самому побеситься


 
ИА   (2006-09-25 23:01) [35]

Piter, я, собственно, не шутил.
В этой фразе: "Тributе То Рink Flоyd" 6 русских символов.


 
Piter ©   (2006-09-25 23:10) [36]

ИА   (25.09.06 23:01) [35]

да я понял! Не к тебе обращался, а к остальным шутникам.


 
Германн ©   (2006-09-26 03:04) [37]


> Piter ©   (25.09.06 18:16) [28]
>
> вы такие шутники - просто пипец, чувство юмора прет из всех
> щелей. Я не удивлюсь, если окажется, что существует несколько
> типов пробелов.
>

А если б мы не были ими, мы бы давно разделили бы участь динозавров! :-)
И кстати. Я не шутил по поводу двух стрелок разных цветов на клавишах! Это пошутил кто-то другой, который имел отношение к изготовлению НБ АйРу. :-)


 
Ketmar ©   (2006-09-26 03:09) [38]

>[28] Piter(c) 25-Sep-2006, 18:16
>Я не удивлюсь, если окажется,
>что существует несколько типов пробелов.
будешь смеяться -- оно таки так. да-да, я опять уйдё в сторону, и не стану пояснять, какие конкретно.


 
Zeqfreed ©   (2006-09-26 09:21) [39]

> [38] Ketmar ©   (26.09.06 03:09)

Зачем уходить? :)
http://en.wikipedia.org/wiki/Space_character


 
wal ©   (2006-09-26 10:08) [40]

Давным-давно, в прошлом веке, когда про виндовс уже слышали, а некоторые даже видели, преподаватель, объясняя азы ДОС-а сказал, что нельзя создать папку/файл, у которого в названии только пробелы. После этого гордого заявления я создал несколько файлов вида #255.#255, был обруган, выдворен из компьютерного класса, преподаватель отобрал зачетку, вернул узе с зачетом ;)



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.029 c
15-1159535957
sergey888
2006-09-29 17:19
2006.10.22
Микрософт вплотную занялась играми


15-1159877352
vitv
2006-10-03 16:09
2006.10.22
Не ставится Дэлфи2006.


15-1159782235
kyn66
2006-10-02 13:43
2006.10.22
Demo для TMS-компонентов


3-1156767901
Shaman_
2006-08-28 16:25
2006.10.22
Отключить механизм кэширования у TClientDataSet


2-1159959399
Gloomer
2006-10-04 14:56
2006.10.22
Отправка почты через IdSMTP