Страница: 1 |
Страница: 1 |
Вопрос: Проблема с длинными путями файлов (255 символов)
Добавлено: 09.04.08 08:27
Автор вопроса: LonerWanderer
Не подскажете - куда копать?
Есть машина с Win Server 2003. Фактически используется как большая файлопомойка.
Есть файлы с полной длиной больше 255 символов. Копироваться они ну никак не хотят.
Вроде сообразил как обойти: нужно subst'ом подмонтировать часть папок, начиная с какого-то уровня вложенности.
И так же подмонтировать каталог-получатель.
Ручками - без проблем. А вот программно у меня что-то не получилось запустить subst на выполнение с параметрами.
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #1
Добавлено: 09.04.08 08:32
Ты не пытался передать сабсту уже укороченные DOS-пути?
У рано встающих долго стоит
Номер ответа: 2
Автор ответа:
J. Smith
ICQ: ненавижу
Вопросов: 40
Ответов: 477
Web-сайт:
Профиль | | #2
Добавлено: 09.04.08 08:41
На VB это чтото типа
'обработка путей
Private Declare Function apiGetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Private Const MAX_PATH = 260
'проверка существования файла/папки
Public Function FileExist(ByVal File As String) As Boolean
Dim sRet As VbFileAttribute
On Error Resume Next
sRet = GetAttr(File)
FileExist = Err.Number = 0
Err.Clear
End Function
'получение DOS пути
Private Function GetShortPath(ByVal Path As String) As String
Dim tmpArr() As String
Dim tmpInt As Integer
Dim tmpStr As String
'если папка и/или файл существует
If FileExist(Path) Then
GetShortPath = Shorting(Path)
'иначе разделить всё на объекты и сократить существующую часть
Else
tmpArr = Split(Path, SL)
For tmpInt = 0 To UBound(tmpArr)
If tmpInt < UBound(tmpArr) Then tmpArr(tmpInt) = tmpArr(tmpInt) & SL
If FileExist(GetShortPath & tmpArr(tmpInt)) Then
tmpStr = Shorting(GetShortPath & tmpArr(tmpInt))
Else
tmpStr = GetShortPath & tmpArr(tmpInt)
End If
GetShortPath = tmpStr
Next
End If
End Function
Private Function Shorting(ByVal Path As String) As String
Shorting = String$(MAX_PATH, vbNullChar)
Call apiGetShortPathName(Path, Shorting, MAX_PATH)
Shorting = Left$(Shorting, InStr(Shorting, vbNullChar) - 1)
End Function
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 12.04.08 18:22
Попробуй длинный путь указывать в ковычках.
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 13.04.08 00:44
+1
Номер ответа: 5
Автор ответа:
LonerWanderer
Вопросов: 18
Ответов: 66
Профиль | | #5
Добавлено: 14.04.08 17:37
Спасибо! Действительно - проблема в кавычках. В пути файла пробелы были.