| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Как ужать длинный путь в короткий? |
| Автор: anvarfromkz 14.10.2010, 11:41 |
| Как ужать длинный путь в короткий? Например: C:\Documents and Settings\User\Рабочий стол\1.mp3 Ужать в C:\Docume~1\User\Рабочи~1\1.mp3 Заранее всех благодарю кто откликнется Inet1.AccessType = icUseDefault 'Protocol to be used Inet1.Protocol = icFTP 'Remote host name Inet1.RemoteHost = Text1(0) 'Server port number, usually its 21 Inet1.RemotePort = "21" 'Server Username Inet1.UserName = Text1(1) 'Server password Inet1.Password = Text1(2) 'Server session timeout 'Inet1.RequestTimeout = "60" For i = 1 To Len(f) If Mid(f, i, 1) = "\" Then filext = Mid(f, i + 1, Len(f) - i) Next i 'Uploading file to server 'PUT method is a command in FTP to upload file to a server Inet1.Execute , "PUT " & f & " " & filext 'Inet1.Execute , "PUT ""c:\demo.exe" & "demo.exe" Листинг программы если файл находиться на C:\ или D:\ то нормально а если на рабочем столе или в документах не отправляет на фтп, думаю из-за длинных имен |
| Автор: anvarfromkz 14.10.2010, 11:57 | ||
k = 1 For i = 1 To Len(Text1.Text) If Mid(Text1.Text, i, 1) = "\" Then slovo = Mid(Text1.Text, k, i - k): k = i + 1 If Len(slovo) > 8 Then slovo = Mid(slovo, 1, 6) & "~1" t = t & slovo & "\" End If Next i Text2.Text = t кажется вот так |
| Автор: Akina 14.10.2010, 12:10 |
Бред... Добавлено через 2 минуты и 27 секунд Вопрос первый - узнать вообще, возможно ли это. Ибо на vFAT короткие пути запросто могут быть отключены. И лишь убедившись, что это возможно, есть смысл пытаться преобразовать - причём для этого явно придётся привлекать API. |
| Автор: anvarfromkz 14.10.2010, 12:13 |
| For i = 1 To Len(f) If Mid(f, i, 1) = "\" Then fileext = Mid(f, i + 1, Len(f) - i) Next i k = 1 For i = 1 To Len(f) If Mid(f, i, 1) = "\" Then slovo = Mid(f, k, i - k): k = i + 1 If Len(slovo) > 8 Then slovo = Mid(slovo, 1, 6) & "~1" t = t & slovo & "\" End If Next i puti = t & Trim(fileext) вот так сделал никак не хочет отправлять На делфи есть а на VB нету uses Windows, SysUtils; function GetShortName(sLongName: string): string; var sShortName: string; nShortNameLen: Integer; begin SetLength(sShortName, MAX_PATH); nShortNameLen := GetShortPathName(PChar(sLongName), PChar(sShortName), MAX_PATH - 1); if (0 = nShortNameLen) then begin // handle errors... end; SetLength(sShortName, nShortNameLen); Result := sShortName; end; // Example: procedure TForm1.Button1Click(Sender: TObject); begin Caption := GetShortName('C:\Program Files\Delphi6\Lib\test.cnt'); // --> C:\PROGRA~1\Delphi6\Lib\test.cnt end; |
| Автор: Akina 14.10.2010, 12:14 |
У меня например E:\Documents and Settings (у меня системный и загрузочный том E:) - это E:\Docume~4 |
| Автор: anvarfromkz 14.10.2010, 12:23 |
| СПАСИБО очередной раз выручили все просто shortname = Space(255) ' make room in the buffer for the short filename slength = GetShortPathName(f, shortname, 255) shortname = Left(shortname, slength) ' extract returned string from buffer puti = shortname |