unc ресурса ФТП
Добавлено: 01 июн 2006, 19:50
Столкнулся второй раз с "юникс стилем" программ использующих сетевой обмен данными...
Когда посылаешь файл в каталог на FTP (ftp.xxx.com/directory/filename), то такой формат имени удалённого файла, directory/filename, одинаково хорошо работает для MS Windows и Unix based FTPs.
Когда же используешь нотацию directory\filename, то MS надо это и посылать. Для юниксов же надо посылать directory\\filename в сеть!
Т.е, LPCTSTR для MS remoteFileName= "directory\\filename" (что ясно и понятно), а для юникс remoteFileName= "directory\\\\filename" (что ясно и смешно).
Такая нежная восприимчивость юникса к эскейп последовательнотям всего лишь в имени файла, передаваемого по сети (передаваемого по сети _имени_) немного удивляет и настараживает неискушённого программиста, вроде меня.
Казалось бы используй / вместо \\. Но не ту-то было. Первый раз столкнулся в с тем, как приложения первоначально написанные для юникс, интерпретируют строки, передаваемые по сети - для MySQL. Легко проверить, что если в базе данных мы захотим хранить path \\host\directory\filename, то придётся использовать нечто вроде LPCTSTR fname = "\\\\\\\\host\\\\direcory\\\\fiename";
Ничего такого для Microsoft нет. Пишем обычную строку:
LPCTSTR fname = "\\\\host\\direcory\\fiename"
Поинт, в том, что негоже по сети передовать строки так, как принято в том или другом языке программирования. Если надо по сети передать строку "\\aaa\bbb", то ровно это, ровно эти байты и должны проезжать по сетке, а не эскейп последовательности.
Поправьте, если я не прав.
Спасибо.
ПС. RFC ftp умалчивает спецификацию последовательности байт представляющих имя ресурса ftp.
Когда посылаешь файл в каталог на FTP (ftp.xxx.com/directory/filename), то такой формат имени удалённого файла, directory/filename, одинаково хорошо работает для MS Windows и Unix based FTPs.
Когда же используешь нотацию directory\filename, то MS надо это и посылать. Для юниксов же надо посылать directory\\filename в сеть!
Т.е, LPCTSTR для MS remoteFileName= "directory\\filename" (что ясно и понятно), а для юникс remoteFileName= "directory\\\\filename" (что ясно и смешно).
Такая нежная восприимчивость юникса к эскейп последовательнотям всего лишь в имени файла, передаваемого по сети (передаваемого по сети _имени_) немного удивляет и настараживает неискушённого программиста, вроде меня.
Казалось бы используй / вместо \\. Но не ту-то было. Первый раз столкнулся в с тем, как приложения первоначально написанные для юникс, интерпретируют строки, передаваемые по сети - для MySQL. Легко проверить, что если в базе данных мы захотим хранить path \\host\directory\filename, то придётся использовать нечто вроде LPCTSTR fname = "\\\\\\\\host\\\\direcory\\\\fiename";
Ничего такого для Microsoft нет. Пишем обычную строку:
LPCTSTR fname = "\\\\host\\direcory\\fiename"
Поинт, в том, что негоже по сети передовать строки так, как принято в том или другом языке программирования. Если надо по сети передать строку "\\aaa\bbb", то ровно это, ровно эти байты и должны проезжать по сетке, а не эскейп последовательности.
Поправьте, если я не прав.
Спасибо.
ПС. RFC ftp умалчивает спецификацию последовательности байт представляющих имя ресурса ftp.