Показать полную графическую версию : короткое имя -->Длинное имя
Как из короткого имени(например,
e:\install\wertep~1) длинное?
Выбрать все файлы удовлетворяющие маске wertep*, первый из них и будет искомым. Соответственно для ~2 - второй итд. Криво, но работает.
а что стандартных способов нету?
GetFullPathName
По короткому имени файла в формате MS-DOS и Windows 16 возвращает его полное имя в формате Windows 32.
че то нигде не нашел как юзать эту функцию.
Я пишу в таком синтаксисе
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
Это все я нашел, даже написал выше. Вроде все так. Но в long все равно остается короткое имя.
Следующие три функции помогут преобразовать длинные имена файлов в коротки и наоборот. Функция 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 - Извлекает из полного имени файла имя диска, имя каталога и имя файла.
Riko, большие тебе благодарности, ты мне очень помог.
to RIKO
а что за переменная InSpace в процедуре MINCE
обана ты крут.
я спрашиваю, че туда писать и что от этого изменится?
че туда писать?
а чёрт его знает.код не мой.
что автор имел ввиду не знаю,разбираться неохота
пиши именно целое число,любое.ничего не меняется.
CyberDaemon
08-01-2004, 10:01
пиши именно целое число,любое.ничего не меняется
While (Length(Result + sFile) < InSpace) And (sl.Count <> 0) Do
Любое? 1 - тоже целое число...
Да нет!
Меняется форма вывода если написать 1 и 255. Попробуйте!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.