Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

Неправильная работа "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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.047 c
15-1159381074
Nic
2006-09-27 22:17
2006.10.22
Работа с оборудованием через com-порт


2-1160033628
dera
2006-10-05 11:33
2006.10.22
Как определить, какой компонент открыл доч. форму?


15-1159789639
Quester
2006-10-02 15:47
2006.10.22
Сложная программа


6-1149062835
Ibrox
2006-05-31 12:07
2006.10.22
FTP


15-1159514963
Червь
2006-09-29 11:29
2006.10.22
Вопрос про антивирус и червей.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский