Na ovoj stranici

Utils::FilePath Class

class Utils::FilePath

Klasa FilePath je apstrakcija za rukohvate objekata u (moguće udaljenom) datotečnom sustavu, slično URL-u ili, u lokalnom slučaju, putu do datoteke ili direktorija. Više...

Header: #include <FilePath>

Javne funkcije

QString baseName() const
Utils::FilePath canonicalPath() const
Qt::CaseSensitivity caseSensitivity() const
Utils::FilePath chopped(int n) const
Utils::FilePath cleanPath() const
void clear()
QString completeBaseName() const
QString completeSuffix() const
bool contains(const QString &s) const
bool createDir() const
Utils::Result<> createSymLink(const Utils::FilePath &symLink) const
QString displayName(const QString &args = {}) const
bool endsWith(const QString &s) const
Utils::Result<> ensureWritableDir() const
bool equalsCaseSensitive(const Utils::FilePath &other) const
bool exists() const
Utils::FilePath intern() const
bool isAbsolutePath() const
bool isChildOf(const Utils::FilePath &s) const
bool isEmpty() const
bool isExecutableFile() const
bool isNewerThan(const QDateTime &timeStamp) const
bool isRelativePath() const
bool isWritableDir() const
bool isWritableFile() const
void iterateDirectory(const Utils::FilePath::IterateDirCallback &callBack, const Utils::FileFilter &filter) const
QString nativePath() const
Utils::FilePath parentDir() const
QChar pathComponentSeparator() const
QChar pathListSeparator() const
std::optional<Utils::FilePath> refersToExecutableFile(Utils::FilePath::MatchScope matchScope) const
Utils::FilePath relativeChildPath(const Utils::FilePath &parent) const
QString relativePathFromDir(const Utils::FilePath &anchorDir) const
Utils::Result<> removeRecursively() const
Utils::FilePath resolvePath(const QString &tail) const
Utils::FilePath resolvePath(const Utils::FilePath &tail) const
Utils::FilePath resolveSymlinks() const
Utils::FilePath searchInDirectories(const Utils::FilePaths &dirs, const Utils::FilePathPredicate &filter = {}, Utils::FilePath::MatchScope matchScope = WithAnySuffix) const
QString shortNativePath() const
bool startsWith(const QString &s) const
bool startsWithDriveLetter() const
QStringView suffixView() const
Utils::FilePath symLinkTarget() const
QString toFSPathString() const
QFileInfo toFileInfo() const
QString toUrlishString() const
QString toUserOutput() const
QVariant toVariant() const
Utils::Result<std::unique_ptr<Utils::FilePathWatcher>> watch() const
Utils::FilePath withNewMappedPath(const Utils::FilePath &newPath) const
Utils::FilePath withNewPath(const QString &newPath) const
QString withTildeHomePath() const

Statični javni članovi

Utils::FilePath fromFileInfo(const QFileInfo &info)
Utils::FilePath fromString(const QString &filepath)
Utils::FilePath fromStringWithExtension(const QString &filepath, const QString &defaultExtension)
Utils::FilePath fromUrl(const QUrl &url)
Utils::FilePath fromUserInput(const QString &filePath)
Utils::FilePath fromUtf8(const char *filename, int filenameSize = -1)
Utils::FilePath fromVariant(const QVariant &variant)

Detaljan opis

Idealno bi sav kôd u klasu Qt Creator trebao koristiti FilePath u tu svrhu, ali iz povijesnih razloga još uvijek postoje veliki dijelovi koji koriste QString.

Putanje datoteka interno se pohranjuju kao trojka nizova, pri čemu jedan dio ("shema") identificira metodu pristupa, drugi dio ("host") datotečni sustav (npr. host), a treći dio ("put") identificira (potencijalni) objekt na sustavima.

FilePath slijedi Unixovu paradigmu "sve je datoteka": nema konceptualne razlike između FilePathova koji se odnose na obične datoteke ili direktorije.

Putanja se implicitno povezuje s operativnim sustavom putem svog dijela za host. Dio putaće koji se odnosi na datoteku interno se pohranjuje s kosim crticama, neovisno o povezanim operativnim sustavom.

Dijelovi puta FilePath-ova povezanih s Windowsom (i macOS-om, osim ako nije drugačije odabrano u postavkama) uspoređuju se međusobno neovisno o velikim i malim slovima. Imajte na umu da usporedbe za jednakost općenito zahtijevaju dodatno znanje, jer za istu datoteku može postojati više prikaza FilePath-a (npr. različiti načini pristupa mogu dovesti do iste datoteke).

Postoji nekoliko konverzija između FilePath-a i drugih prikaza nalik na nizove:

  • FilePath::fromUserInput()

    Konvertirajte podatke nalik nizu iz izvora koji potječu izvan Qt Creator-a, npr. iz ljudskog unosa u GUI kontrolama, iz varijabli okruženja i iz parametara naredbenog retka, u Qt Creator.

    Unos može sadržavati i crtice i nazadne crtice te će biti analiziran i normaliziran.

  • FilePath::nativePath()

    Pretvara FilePath u konvenciju kose crte (slash) odgovarajućeg operativnog sustava i uklanja dijelove sheme i domaćina.

    Ovo je korisno za interakciju s mogućnostima povezanog OS-a, npr. pri prosljeđivanju ove putanje datoteke kao argumenta naredbi izvršenoj na povezanom OS-u.

    Napomena: Putanju datoteke proslijeđenu kao izvršnu datoteku u CommandLine u obično ne dira korisnički kod. Proces će je koristiti za utvrđivanje udaljenog sustava i interno primijeniti potrebne konverzije.

  • FilePath::toFSPathString()

    Konvertira FilePath u niz [drive:]/__qtc_devices__/scheme/host/path.

    Rezultat u većini slučajeva radi i s udaljenim postavkama te s QDir/QFileInfo, ali je sporiji od izravne upotrebe FilePath-a i trebao bi se koristiti samo kada je ispravno prilagođavanje za FilePath preteško ili nemoguće, npr. kada se koriste vanjske biblioteke temeljene na Qt-u koje ne koriste FilePath.

  • FilePath::toUserOutput()

    Pretvara FilePath u konvenciju crtice (/) odgovarajućeg operativnog sustava i zadržava dijelove sheme i hosta.

    Ovo je rijetko korisno za udaljene putanje jer praktički ne postoji korisnik ovog stila.

  • FilePath::displayName()

    Pretvara FilePath u konvenciju kose crte povezanog operativnog sustava i dodaje shemu i host kao nastavak "on <uređaj>".

    Ovo je korisno za statički prikaz namijenjen korisniku u GUI-ju.

  • FilePath::fromVariant(), FilePath::toVariant()

    Koriste se za interfejs API-ja temeljenog na QVariant u, npr. postavke ili interni model stavki.

  • FilePath::toUrlishString()

    Konvertira FilePath u niz u obliku sheme://host/path.

    Uglavnom se koristi u naslijeđenom kodu i radi otklanjanja pogrešaka.

    Uglavnom se koristi u naslijeđenom kodu i radi otklanjanja pogrešaka.

    U gotovo svim slučajevima prikladnije je koristiti jednu od gore navedenih specijaliziranijih konverzija.

    Konverzija podataka nalik nizu uvijek bi se trebala odvijati na vanjskoj granici koda u xml-ph-0000@

Konverzija podataka nalik na niz uvijek bi se trebala odvijati na vanjskoj granici koda Qt Creator, koristeći fromUserInput() za ulaznu komunikaciju i, ovisno o mediju, nativePath() ili displayName() za izlaznu komunikaciju.

Komunikacija s Qt API-jem temeljenim na QVariant trebala bi koristiti fromVariant() i toVariant().

Upotreba toUrlishString() treba se postupno ukinuti transformacijom koda iz putanja temeljenih na QString u FilePath. Izuzetak su fragmenti putanja FilePath-a koji se kasnije koriste s pathAppended() ili sličnim, a koji bi trebali ostati kao QString.

UNC putanje zadržat će svoj početak "//" i po tome su prepoznatljive.

Dokumentacija funkcija člana

QString FilePath::baseName() const

Vraća osnovno ime datoteke bez puta.

Osnovno ime sastoji se od svih znakova u datoteci do (ali ne uključujući) prvi znak '.'.

Utils::FilePath FilePath::canonicalPath() const

Rekurzivno rješava moguće prisutne simbolne poveznice u nazivu ove datoteke.

Na Windowsu također razrješava SUBST i ponovno priključene NTFS pogone. Za razliku od QFileInfo::canonicalFilePath(), ova funkcija neće vratiti praznu nulu ako put ne postoji.

Vraća kanonički put.

Qt::CaseSensitivity FilePath::caseSensitivity() const

Vraća osjetljivost na velika i mala slova staze.

Ovo je trenutačno temeljeno samo na gostujućem OS-u. Za putanje uređaja uvijek se vraća Qt::CaseSensitive.

Utils::FilePath FilePath::chopped(int n) const

Vraća putanju s uklonjenim znakovima zaštićenih razmaka ( n ) iz lokalne putanje. Primjer upotrebe:

backup = FilePath("/tmp/example.txt.backup");
real = backup.chopped(7);
assert(real == FilePath("/tmp/example.txt"))

Utils::FilePath FilePath::cleanPath() const

Čisti dio puta sličan QDir::cleanPath() u.

  • razdjelnici direktorija se normaliziraju (tj. razdjelnici nativni za platformu pretvaraju se u "/"), uklanjaju se suvišni razdjelnici, a "." i ".." se rješavaju (koliko je to moguće).
  • Simboličke poveznice se zadržavaju. Ova funkcija ne vraća kanoničku putanju, već jednostavniju verziju unosa. Na primjer, "./local" postaje "local", "local/../bin" postaje "bin" i "/local/usr/../bin" postaje "/local/bin".

void FilePath::clear()

Čisti sve dijelove FilePath a.

QString FilePath::completeBaseName() const

Vraća potpuno osnovno ime datoteke bez putanje.

Potpuno osnovno ime sastoji se od svih znakova u datoteci sve do (ali ne uključujući) posljednjeg znaka točke ('.'). U slučaju ".ui.qml" tretira se kao jedan nastavak.

QString FilePath::completeSuffix() const

Vraća potpunu nastavku (extenziju) datoteke.

Potpuna nastavka sastoji se od svih znakova u datoteci nakon (ali ne uključujući) prvog '.'.

bool FilePath::contains(const QString &s) const

Vraća istinitu vrijednost ako n path() sadrži m s.

bool FilePath::createDir() const

Stvara direktorij na ovoj lokaciji.

Vraća true ako je direktorij mogao biti stvoren, false ako nije, čak i ako je već postojao.

Vidi također ensureWritableDir().

Stvara simboličku poveznicu symLink koja upućuje na ovu putanju datoteke.

Napomena: Na Windowsima ova funkcija neće raditi ako nemate administratorska prava ili ako nije omogućen način programera.

QString FilePath::displayName(const QString &args = {}) const

Pretvara putanju datoteke u konvenciju kosih crta povezanog operativnog sustava i dodaje shemu i host kao sufiks "on <uređaj>".

Ovo je korisno za statički prikaz namijenjen korisniku u GUI-ju.

Ako args nije prazan, dodaje se u izlaz nakon putanje datoteke: "<path> <args> on <device>".

bool FilePath::endsWith(const QString &s) const

Vraća istinu ako se niz znakova " path() " završava nizom " s".

Utils::Result<> FilePath::ensureWritableDir() const

Ponovno koristi ili stvara direktorij na ovoj lokaciji.

Vraća true ako je direktorij nakon toga zapisan.

Vidi također createDir().

bool FilePath::equalsCaseSensitive(const Utils::FilePath &other) const

Vraća true ako se ova putanja datoteke usporedba s other -om slučajno podudara. Ovo je relevantno na polu-osjetljivim sustavima na velika slova poput Windowsa s NTFS-om.

Vidi također QTCREATORBUG-30846.

bool FilePath::exists() const

Vraća boolean koji označava postoji li datoteka ili direktorij s ovim FilePath om.

[static] Utils::FilePath FilePath::fromFileInfo(const QFileInfo &info)

Konstruira e FilePath iz m info.

[static] Utils::FilePath FilePath::fromString(const QString &filepath)

Konstruira FilePath iz filepath

filepath se ne provjerava na valjanost. Može biti naveden u sljedećim oblicima:

  • /neki/apsolutni/lokalni/put
  • neki/relativni/put
  • shema://host/apsolutna/pista
  • scheme://host/./relativna/staza

    Napomena: ./ je doslovni dio puta

    Napomena: ./ je doslovni dio puta

Dekodiranje se događa tijekom parsiranja filepath Sljedeća sekvenca %25 u dijelu hosta zamjenjuje se s % u nazivu hosta, a sekvenca %2f u dijelu hosta zamjenjuje se s / u nazivu hosta.

Dio puta može se sastojati od više dijelova odvojenih /, neovisno o platformi ili datotečnom sustavu.

Za stvaranje objekata FilePath iz nizova koji mogu sadržavati nazadne kose crte kao razdjelnik puta, upotrijebite fromUserInput.

Vidi također toFSPathString, toUserOutput i fromUserInput.

[static] Utils::FilePath FilePath::fromStringWithExtension(const QString &filepath, const QString &defaultExtension)

Konstruira se FilePath iz filepath. defaultExtension se dodaje na filepath ako taj već nema ekstenziju.

filepath Ne provjerava se valjanost.

[static] Utils::FilePath FilePath::fromUrl(const QUrl &url)

Konstruira FilePath iz url.

Vidi također toVariant().

[static] Utils::FilePath FilePath::fromUserInput(const QString &filePath)

Konstruira FilePath iz filePath

Staza filePath se čisti, a ~ se zamjenjuje početnom stazom.

[static] Utils::FilePath FilePath::fromUtf8(const char *filename, int filenameSize = -1)

Konstruira FilePath iz filename pomoću filenameSize, koji je kodiran u UTF-8.

filename ne provjerava se valjanost.

[static] Utils::FilePath FilePath::fromVariant(const QVariant &variant)

Konstruira FilePath iz variant.

Vidi također toVariant().

Utils::FilePath FilePath::intern() const

Vraća kopiju sa zadržanim podacima.

bool FilePath::isAbsolutePath() const

Provjerava je li put apsolutni.

Vraća true ako putanja započinje s kosom crtom, ili s slovom i dvotočkom, ili s dvotočkom i kosom crtom.

Napomena: Ovo je neovisno o platformi na kojoj Qt Creator trenutno radi, pa se ovo ne mora nužno podudarati s definicijom apsolutne putanje te platforme. Koristite s oprezom i pokušajte to izbjeći.

Vidi također isRelativePath().

bool FilePath::isChildOf(const Utils::FilePath &s) const

Vraća istinu ako je FilePath dijete s.

bool FilePath::isEmpty() const

Provjerava je li path() prazan.

Vraća true ako je path() prazan. Host i Scheme dijela se zanemaruju.

bool FilePath::isExecutableFile() const

Vraća boolean vrijednost koja označava je li ovo izvršna datoteka.

bool FilePath::isNewerThan(const QDateTime &timeStamp) const

Provjerava je li ovo novije od timeStamp.

Vremenski žig timeStamp za usporedbu. Vraća true ako je noviji od timeStamp. Ako je ovo direktorij, funkcija će rekursivno provjeriti sve datoteke i vratiti true ako je neka od njih novija od timeStamp. Ako je ovo pojedinačna datoteka, vraća se true ako je datoteka novija od timeStamp.

Vraća informaciju je li barem jedna datoteka u putanji datoteke novijeg datuma od timeStamp.

bool FilePath::isRelativePath() const

Provjerava je li put relativan.

Vraća true ako putanja ne počinje ni s crticom, ni s slovom i dvotočkom, ni s dvotočkom i crticom.

Napomena: Ovo je neovisno o platformi na kojoj Qt Creator trenutno radi, pa se ovo ne mora nužno podudarati s definicijom relativne staze te platforme. Koristite s oprezom i pokušajte to izbjeći.

Vidi također isAbsolutePath().

bool FilePath::isWritableDir() const

Vraća boolean koji označava je li ovo direktorij u koji se može pisati.

bool FilePath::isWritableFile() const

Vraća boolean vrijednost koja označava je li datoteka zapisiniva.

void FilePath::iterateDirectory(const Utils::FilePath::IterateDirCallback &callBack, const Utils::FileFilter &filter) const

Pokreće callBack na svakom unosu direktorija koji odgovara filter.

QString FilePath::nativePath() const

Vraća QString u za prosljeđivanje nativnih naredbi ciljanog sustava, bez prefiksa uređaja.

Konvertira razdjelnike u izvorni format sustava kojem ova putanja pripada.

Utils::FilePath FilePath::parentDir() const

Pronalazi nadređeni direktorij putanje datoteke.

Vraća prazan put datoteke ako je put datoteke već direktorij na korijenskoj razini.

Vraća putanju datoteke s uklonjenim posljednjim segmentom.

QChar FilePath::pathComponentSeparator() const

Vraća razdjelnik komponenti puta za ovaj put.

Vraća razdjelnik komponenti staze.

QChar FilePath::pathListSeparator() const

Vraća razdjelnik popisa putanja za uređaj kojem ova putanja pripada.

Vraća razdjelnik popisa putanja uređaja za ovu putanju.

std::optional<Utils::FilePath> FilePath::refersToExecutableFile(Utils::FilePath::MatchScope matchScope) const

Vraća boolean koji označava hoće li se proces s ovom FilePath-ovom nativnom putanjom vjerojatno pokrenuti.

Ovo je općenito ekvivalentno funkciji isExecutableFile() . Na Windowsima može dodati razne nastavke ovisno o matchScope.

Utils::FilePath FilePath::relativeChildPath(const Utils::FilePath &parent) const

Relativna staza od parent do ovoga.

Vraća prazan FilePath ako ovo nije dijete parent. parent je roditelj za izračun relativne staze. To jest, ovo nikada ne vraća stazu koja počinje s "../".

Vraća relativnu stazu od ovoga do parent ako je ovo dijete parent-a.

QString FilePath::relativePathFromDir(const Utils::FilePath &anchorDir) const

Vraća relativnu putanju FilePath -a iz direktorija anchorDir. FilePath i anchor directory mogu biti datoteke ili direktoriji.

Primjer upotrebe:

FilePath filePath("/foo/b/ar/file.txt");
FilePath relativePath = filePath.relativePathFrom("/foo/c");
qDebug() << relativePath

Izlazak za otklanjanje pogrešaka bit će "../b/ar/file.txt".

Utils::Result<> FilePath::removeRecursively() const

Uklanja direktorij na koji se ovaj filePath odnosi i njegove poddirektorije rekursivno.

Utils::FilePath FilePath::resolvePath(const QString &tail) const

Dodaje p tail u na ovo, ako je rep relativna staza.

Vraća ovo s novim repom puta ako je rep apsolutni, inače ovo + rep.

Utils::FilePath FilePath::resolvePath(const Utils::FilePath &tail) const

Dodaje p tail u na ovo, ako je rep relativna putanja.

Vraća rep ako je rep apsolutni, inače vraća ovo + rep.

Rekurzivno rješava simboličke poveznice ako je ovo simbolička poveznica.

Za rješavanje simboličkih poveznica bilo gdje u putanji pogledajte canonicalPath. Za razliku od QFileInfo::canonicalFilePath(), ova funkcija i dalje vraća očekivanu najdublju ciljnu datoteku čak i ako je simbolička poveznica nepostojeća.

Napomena: Maksimalna dubina rekurzije == 16.

Vraća putanju datoteke cilja simboličke poveznice.

Utils::FilePath FilePath::searchInDirectories(const Utils::FilePaths &dirs, const Utils::FilePathPredicate &filter = {}, Utils::FilePath::MatchScope matchScope = WithAnySuffix) const

Pretražite binarnu datoteku odgovarajuću ovom objektu u svakom direktoriju navedenom pomoću dirs, usporedivši filter s matchScope putanje datoteke.

Primjer upotrebe:

binary = FilePath::fromUrl("docker://123/./make);
fullPath = binary.searchInDirectories(binary.deviceEnvironment().path());
assert(fullPath == FilePath::fromUrl("docker://123/usr/bin/make"))

QString FilePath::shortNativePath() const

Pretvara putanju u moguće skraćenu putanju s nativnim razdjelnicima.

Poput QDir::toNativeSeparators(), ali koristi prefiks '~' umjesto $HOME na unix sustavima kada je zadana apsolutna putanja.

Vraća moguće skraćenu putanju s nativnim razdjelnicima.

bool FilePath::startsWith(const QString &s) const

Vraća istinitu vrijednost ako se path() započinje s s.

bool FilePath::startsWithDriveLetter() const

Provjerava započinje li FilePath slovom diska. Vraća informaciju o tome započinje li FilePath slovom diska.

QStringView FilePath::suffixView() const

Vraća nastavak (ekstenziju) datoteke.

Zadnji nastavak se sastoji od svih znakova u datoteci nakon (ali ne uključujući) posljednjeg '.'. U slučaju ".ui.qml" tretira se kao jedan nastavak.

Utils::FilePath FilePath::symLinkTarget() const

Vraća praznu FilePath ako ovo nije simbolička poveznica.

QString FilePath::toFSPathString() const

Vraća QString za prosljeđivanje API-jima temeljenim na QString.

Ovo koristi postavku /__qtc_devices__/host/path.

Ovo radi u većini slučajeva i s udaljenim postavkama te s QDir/QFileInfo itd., ali je sporije od izravne upotrebe FilePath i trebalo bi ga koristiti samo kada je ispravno prebacivanje na FilePath preteško ili nemoguće, npr. kada se koriste vanjske Qt-bazirane biblioteke koje ne koriste FilePath.

Vidi također fromUserInput().

QFileInfo FilePath::toFileInfo() const

Vraća QFileInfo.

QString FilePath::toUrlishString() const

Vraća QString za prosljeđivanje API-ja temeljenih na QString.

Napomena: Ovo je zastarjeli API i treba ga zamijeniti proširenom upotrebom odgovarajućih FilePath, ili, ako to nije moguće, toFSPathString().

Ovo koristi postavku shema://host/path i, zajedno s fromString, služi za prosljeđivanje FilePath kroz QString koristeći kodne staze.

Rezultat nije koristan za upotrebu s cQDir i QFileInfo te se uništava nekim operacijama poput QFileInfo::canonicalFile.

Vidi također toFSPathString().

QString FilePath::toUserOutput() const

QString Vraća nisku za prikaz korisniku, uključujući prefiks uređaja.

Pretvara razdjelnike u izvorni format sustava kojem ova staza pripada.

QVariant FilePath::toVariant() const

Vraća e FilePath kao varijantu.

Koristi se za tipski neovisne interne sučelje poput pohrane u QAbstractItemModelima.

Utils::Result<std::unique_ptr<Utils::FilePathWatcher>> FilePath::watch() const

Vraća FilePathWatcher za ovu putanju.

Vraćeni FilePathWatcher emitira signal kada se datoteka na ovoj putanji izmijeni, preimenuje ili izbriše. Signal se emitira u pozivajućem niti. Ako se pozove iz niti koji nije glavni, može proći neko vrijeme prije nego što se signal počne emitirati.

Vidi također FilePathWatcher.

Utils::FilePath FilePath::withNewMappedPath(const Utils::FilePath &newPath) const

Vraća putanju koja odgovara objektu newPath na istom uređaju kao i trenutni objekt.

Ovo može uključivati uređajsko-specifične prijevode, poput pretvaranja Windows stila putanja u Unix stil putanja uz odgovarajuće poštivanje velikih i malih slova datotečnog sustava ili rukovanje slovima pogona: C:/dev/src -> /c/dev/src

Primjer upotrebe:

localDir = FilePath("/tmp/workingdir");
executable = FilePath::fromUrl("docker://123/bin/ls")
realDir = executable.withNewMappedPath(localDir)
assert(realDir == FilePath::fromUrl("docker://123/tmp/workingdir"))

Utils::FilePath FilePath::withNewPath(const QString &newPath) const

Vraća FilePath s lokalnom putanjom newPath na istom uređaju kao i trenutni objekt.

Primjer upotrebe:

devicePath = FilePath("docker://123/tmp");
newPath = devicePath.withNewPath("/bin/ls");
assert(realDir == FilePath::fromUrl("docker://123/bin/ls"))

QString FilePath::withTildeHomePath() const

Na Linuxu/Macu zamijenite korisnikov put kućnog direktorija s ~ u rezultatu naredbe toString() za taj put nakon čišćenja.

Ako putanja nije poddirektorij korisničkog doma ili se pokreće na Windowsu, vraća ulazni podatak.

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.