PDA

Показать полную графическую версию : короткое имя -->Длинное имя


Nealles
30-12-2003, 09:50
Как из короткого имени(например,
e:\install\wertep~1) длинное?

ivank
30-12-2003, 10:07
Выбрать все файлы удовлетворяющие маске wertep*, первый из них и будет искомым. Соответственно для ~2 - второй итд. Криво, но работает.

Nealles
30-12-2003, 10:30
а что стандартных способов нету?

RIKO
31-12-2003, 00:58
GetFullPathName
По короткому имени файла в формате MS-DOS и Windows 16 возвращает его полное имя в формате Windows 32.

Nealles
31-12-2003, 09:59
че то нигде не нашел как юзать эту функцию.

Я пишу в таком синтаксисе

getfullpathname(short,255,long,'')

short,long: array[0..255] of char;

что не так?

Добавлено:

в догонку:

я нашел правильный синтаксис: последний аргумент типа PChar должен быть.

однако в переменную long пишется тотже путь что и в short. Может еще чего надо.

CyberDaemon
31-12-2003, 13:19
ThE ACE Ты делфи без хелпа чтоли ставил? Описалово находится на раз, по CTRL-F1

The GetFullPathName function retrieves the full path and filename of a specified file.

DWORD GetFullPathName(

* *LPCTSTR lpFileName, // address of name of file to find path for
* *DWORD nBufferLength, // size, in characters, of path buffer
* *LPTSTR lpBuffer, // address of path buffer
* *LPTSTR *lpFilePart // address of filename in path
* );


Parameters

lpFileName

Points to a null-terminated string that specifies a valid filename. This string can use either short (the 8.3 form) or long filenames.

nBufferLength

Specifies the size, in characters, of the buffer for the drive and path.

lpBuffer

Points to a buffer that contains the null-terminated string for the name of the drive and path.

lpFilePart

Points to a variable that receives the address (in lpBuffer) of the final filename component in the path. This filename component is the long filename, if any, rather than the 8.3 form of the filename.



Return Values

If the GetFullPathName function succeeds, the return value is the length, in characters, of the string copied to lpBuffer, not including the terminating null character.
If the lpBuffer buffer is too small, the return value is the size of the buffer, in characters, required to hold the path.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The GetFullPathName function merges the name of the current drive and directory with the specified filename to determine the full path and filename of the specified file. It also calculates the address of the filename portion of the full path and filename. This function does not verify that the resulting path and filename are valid or that they refer to an existing file on the associated volume.

See Also

GetShortPathName, GetTempPath, SearchPath

Nealles
31-12-2003, 14:01
Это все я нашел, даже написал выше. Вроде все так. Но в long все равно остается короткое имя.

RIKO
31-12-2003, 17:07
Следующие три функции помогут преобразовать длинные имена файлов в коротки и наоборот. Функция Mince служит для отображения полного имени файла, включая путь.




Function Mince(PathToMince: String; InSpace: Integer): String;


Var
 sl: TStringList;
 sHelp, sFile: String;
 iPos: Integer;

Begin
 sHelp := PathToMince;
 iPos := Pos('\', sHelp);
 If iPos = 0 Then
 Begin
   Result := PathToMince;
 End
 Else
 Begin
   sl := TStringList.Create;
   // Decode string
   While iPos <> 0 Do
   Begin
     sl.Add(Copy(sHelp, 1, (iPos - 1)));
     sHelp := Copy(sHelp, (iPos + 1), Length(sHelp));
     iPos := Pos('\', sHelp);
   End;
   If sHelp <> '' Then
   Begin
     sl.Add(sHelp);
   End;
   // Encode string
   sFile := sl[sl.Count - 1];
   sl.Delete(sl.Count - 1);
   Result := '';
   While (Length(Result + sFile) < InSpace) And (sl.Count <> 0) Do
   Begin
     Result := Result + sl[0] + '\';
     sl.Delete(0);
   End;
   If sl.Count = 0 Then
   Begin
     Result := Result + sFile;
   End
   Else
   Begin
     Result := Result + '..\' + sFile;
   End;
   sl.Free;
 End;
End;

{===================================================}
Function ShortFileName(Const FileName: String): String;
{===================================================}
Var
 aTmp: Array[0..255] Of Char;

Begin
 If Not FileExists(FileName) Then
 Begin
   Result := '';
 End
 Else
 Begin
   If GetShortPathName(PChar (FileName), aTmp, Sizeof (aTmp) - 1) = 0 Then
   Begin
     Result:= FileName;
   End
   Else
   Begin
     Result:= StrPas (aTmp);
   End;
 End;
End;

{==============================================}
Function LongFileName(ShortName: String): String;
{==============================================}
Var
 SR: TSearchRec;

Begin
 Result := '';
 If (pos ('\\', ShortName) + pos ('*', ShortName) +
     pos ('?', ShortName) <> 0) Or Not FileExists(ShortName) Then
 Begin
   { ignore NetBIOS name, joker chars and invalid file names }
   Exit;
 End;
 While FindFirst(ShortName, faAnyFile, SR) = 0 Do
 Begin
   { next part as prefix }
   Result := '\' + SR.Name + Result;
   SysUtils.FindClose(SR);  { the SysUtils, not the WinProcs procedure! }
   { directory up (cut before '\') }
   ShortName := ExtractFileDir (ShortName);
   If length (ShortName) <= 2 Then
   Begin
     Break;  { ShortName contains drive letter followed by ':' }
   End;
 End;
 Result := ExtractFileDrive (ShortName) + Result;
end;




Добавлено:

На будущее
Основные функции и процедуры для работы с файлами

AssignFile - Устанавливает ассоциативную связь между файловой переменной и внешним файлом.
BlockRead - Читает несколько записей из файла в переменную.
BlockWrite - Записывает несколько записей в файл.
CloseFile - Разрывает ассоциативную связь между файловой переменной и файлом.
DeleteFile - Удаляет файл с диска.
DiskFree - Определяет количество свободного места на диске.
DiskSize - Определяет размер указанного диска.
Eof - Определяет, стоит ли указатель в конце файла.
Erase - Удаляет файл, связанный с файловой переменной.
DiskSize - Определяет размер указанного диска.
FileExists - Проверяет, существует ли указанный файл.
FileGetAttr - Возвращает атрибуты указанного файла.
FilePos - Возвращает текущую позицию файлового указателя.
FileSearch - Производит поиск файла в нескольких заданных каталогах.
FileSetAttr - Устанавливает атрибуты файла.
FileSize - Возвращает размер файла в байтах, а для файлов типа Record - количество записей.
FindClose - Высвобождает память, выделенную процедурой FindFirst.
FindFirst - Находит файл с заданным набором атрибутов по заданной маске в указанном каталоге.
FindNext - Производит повторный поиск файла.
IOResult - Возвращает статус ошибки последней выполненной операции ввода/вывода.
Read - Читает данные из файла.
Rename - Переименовывает файл.
RenameFile - Переименовывает файл.
Reset - Открывает существующий файл.
Rewrite - Создает новый файл и открывает его.
Seek - Устанавливает файловый указатель в заданную позицию.
Truncate - Удаляет все записи в файле, находящиеся после текущей позиции.
Write - Записывает данные в файл.





Функции и процедуры для работы с каталогами

ChDir - Устанавливает текущий каталог.
CreateDir - Создает новый каталог.
DirectoryExists - Определяет, существует ли указанный каталог.
ForceDirectories - Создает все недостающие каталоги по заданному пути.
GetCurrentDir - Возвращает полное имя текущего каталога.
GetDir - Возвращает имя текущего каталога на указанном диске.
MkDir - Создает подкаталог.
RemoveDir - Удаляет заданный каталог.
RmDir - Удаляет заданный каталог.
SetCurrentDir - Устанавливает текущий каталог.





Функции и процедуры для работы с именем файла

ChangeFileExt - Возвращает имя файла с новым заданным расширением.
ExcludeTrailingBackslash (Delphi 5 и выше) - удаляет в конце строки (пути к файлу) символ наклонной влево черты '\'.
ExpandFileName - Возвращает полное имя файла, добавляя указанное имя файла к имени текущего каталога.
ExpandUNCFileName - Возвращает полное имя файла на сетевом диске.
ExtractFileDir - звлекает из полного имени файла полное имя каталога, в котором находится файл.
ExtractFileDrive - Извлекает из полного имени файла имя диска.
ExtractFileExt - Возвращает расширение файла.
ExtractFileName - Извлекает имя файла из полного имени файла.
ExtractFilePath - Извлекает из полного имени файла имя диска и каталогов (путь к файлу).
ExtractRelativePath - Преобразовывает полный путь в относительный.
ExtractShortPathName - Конвертирует длинное имя файла в формат DOS.
IncludeTrailingBackslash (Delphi 5 и выше) - Добавляет в конец строки символ наклонной влево черты '\'.
MatchesMask - Проверяет, соответствует ли имя файла заданной маске (фильтру).
MinimizeName (Delphi 4 и выше) - Заменяет часть имени файла многоточием, для того, чтобы уместить его в заданный размер холста. ProcessPath - Извлекает из полного имени файла имя диска, имя каталога и имя файла.

Nealles
05-01-2004, 10:32
Riko, большие тебе благодарности, ты мне очень помог.

Nealles
05-01-2004, 13:48
to RIKO
а что за переменная InSpace в процедуре MINCE

RIKO
05-01-2004, 17:02
integer - целое число.

Nealles
05-01-2004, 17:34
обана ты крут.
я спрашиваю, че туда писать и что от этого изменится?
че туда писать?

RIKO
06-01-2004, 21:14
а чёрт его знает.код не мой.
что автор имел ввиду не знаю,разбираться неохота
пиши именно целое число,любое.ничего не меняется.

CyberDaemon
08-01-2004, 10:01
пиши именно целое число,любое.ничего не меняется
While (Length(Result + sFile) < InSpace) And (sl.Count <> 0) Do

Любое? 1 - тоже  целое число...

Nealles
08-01-2004, 10:15
Да нет!
Меняется форма вывода если написать 1 и 255. Попробуйте!!!




© OSzone.net 2001-2012