/
Smitis
/
PurePortable
Обзор
Документация
Войти
/
Smitis
/
PurePortable
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PPDK/Lib/proc/NormalizePath.pbi
58 строк
2 KB
Smitis
v4.10.0.30
19 окт 2024, 19:00
19 окт 2024, 19:00
ef85b10
Код
Авторство
О чём код?
; https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfullpathnamew ; https://learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathcanonicalizew ; https://learn.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathremovebackslashw ; https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats ;CanonicalizePath Procedure.s NormalizePath(Path.s,Dir.s="") If Path ; Если не проверить, для пустой строки вернёт корень текущего диска Protected NewPath.s, Ending.s If Right(Path,1) = "\" ; сохраним завершающий «\» для папок NewPath = Path + "." Ending = "\" Else NewPath = Path + "\." EndIf If Mid(Path,2) <> ":" ; относительный путь If Dir="" Dir = GetCurrentDirectory() Else Dir = RTrim(Dir,"\")+"\" EndIf Path = Dir+Path ; TODO: пути, начинающиеся с "\" EndIf Protected *Buf Protected LenBuf = GetFullPathName_(@NewPath,0,#Null,#Null) If LenBuf *Buf = AllocateMemory(LenBuf*2) GetFullPathName_(@NewPath,LenBuf,*Buf,#Null) NewPath = PeekS(*Buf) FreeMemory(*Buf) ProcedureReturn NewPath+Ending EndIf EndIf ProcedureReturn Path EndProcedure ; Procedure.s NormalizePath2(Path.s) ; If Path ; Иначе вернём корень текущего диска ; Path + "\." ; Protected Len = GetFullPathName_(@NewPath,0,#Null,#Null) ; Protected Result.s ; If Len ; Result = Space(Len) ; GetFullPathName_(@Path,Len,@Result,#Null) ; ProcedureReturn Result ; EndIf ; EndIf ; ProcedureReturn Path ; EndProcedure ; IDE Options = PureBasic 6.04 LTS (Windows - x86) ; CursorPosition = 21 ; FirstLine = 6 ; Folding = - ; EnableThread ; DisableDebugger ; EnableExeConstant