Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: domkratt.com
 Профиль | | #4
Добавлено: 13.04.08 00:44
+1

Ответить

Номер ответа: 5
Автор ответа:
 LonerWanderer



Вопросов: 18
Ответов: 66
 Профиль | | #5 Добавлено: 14.04.08 17:37
Спасибо! Действительно - проблема в кавычках. В пути файла пробелы были.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам