Keresés

Hirdetés

Új hozzászólás Aktív témák

  • P.H.

    senior tag

    A Windows API csatlakozási unitban: const MAX_PATH = 260;

    SDK idézet:

    Filename Conventions:
    [...]
    Process a path as a null-terminated string. The maximum length for a path, including a trailing backslash, is given by MAX_PATH.
    [...]
    The wide (Unicode) versions of the CreateDirectory, FindFirstFile, GetFileAttributes, and SetFileAttributes functions permit paths that exceed the MAX_PATH length if the path has the "\\?\" or "\\?\UNC\" prefix. These prefixes direct the functions to turn off path parsing. Use the "\\?\" prefix with paths for local storage devices and the "\\?\UNC\" prefix with paths having the Universal Naming Convention format.
    [...]

    Példa a CreateFile API-hívás leírásánál:
    [...]
    If *lpFileName is a path, there is a default string size limit of MAX_PATH characters. This limit is related to how the CreateFile function parses paths.
    Windows NT: You can use paths longer than MAX_PATH characters by calling the wide (W) version of CreateFile and prepending "\\?\" to the path. The "\\?\" tells the function to turn off path parsing. This lets you use paths that are nearly 32,000 Unicode characters long. You must use fully-qualified paths with this technique. This also works with UNC names. The "\\?\" is ignored as part of the path. For example, "\\?\C:\myworld\private" is seen as "C:\myworld\private", and "\\?\UNC\tom_1\hotstuff\coolapps" is seen as "\\tom_1\hotstuff\coolapps".

    [...]

    Ha programot írsz, akkor ez a megoldás. Tehát Unicode string-eket használó program esetén (és csak ekkor) megteheted, hogy a teljes (gyökértől eredő) elérési utakat tartalmazó fileneveket a \\?\-rel vezeted be, ekkor kb. 32K hosszú lehet a teljes elérési út.

    Ha maga a Windows-felület nem tudja kezelni a hosszú elérési utakat, akkor... marad az átszervezés.

    [ Szerkesztve ]

    Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

  • P.H.

    senior tag

    válasz supesz #9 üzenetére

    A 260-as amúgy korlát az egyszerre megadható hosszra vonatkozik, nem a teljes, abszolút útvonalra. Szóval az

    assignfile(afile,'c:\nagyon_hosszú\még_hosszabb\file_name.txt')

    esetén, ha a teljes út hosszabb, mint 260 karakter, akkor Unicode nélkül is csinálhatod azt, hogy

    cddir('c:\nagyon_hosszú');
    chdir('.\még_hosszabb');
    assignfile(afile,'.\file_name.txt);

    sorozatot minden gond nélkül (255 hosszú mappa/file név + a leghosszabb prefix is 4 karakteres).

    Még mindig feltételezve, hogy programíráshoz kell. Azt nem nagyon hiszem, hogy NTFS-en pl. az Exlporer megadná magát emiatt.

    #2 föccer:
    Igaz itt sem használhat windows-os eszközöket, mint pl: opendialog, savedialog, mert ezek is 255 karakterben tárolják a fájlok elérési útját.

    Az OpenDialog alatt levő API-hívás csak filenevet ad vissza, a programozási nyelvi körítések esetleg ezt egészítik ki utólag az aktuális könyvtár lekérdezésével, amire nincs hossz-korlátozás.

    [ Szerkesztve ]

    Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

  • P.H.

    senior tag

    válasz supesz #13 üzenetére

    Tévedtem, megadja magát az Explorer NTFS-en is emiatt. Semmi nem indokolja ezt azontúl, hogy (hivatalosan) a Windows 9x verziókkal való kompatibilitás miatt nem lehet átlépni a gyökértől számított 260 karakteres útvonal-hosszt. Tehát (bár az NTFS képes sokkal mélyebb struktúrát is korrekt módon tárolni,) azt az elvet kell követni, amit leírtál #13-ban.

    Gyors megoldás (Windows 9x-től egészen XP x64-ig biztosan működik, kipróbáltam). Tehát a fenti esetben, ha az elérési út
    c:\nagyon_hosszú\még_hosszabb\file_name.txt
    hosszabb, mint 260 karakter, akkor a SUBST parancs használatával:
    SUBST z: c:\nagyon_hosszú\még_hosszabb
    a file a Z:\file_name.txt hivatkozással elérhető, vagy rendesen, GUI-n keresztül, mivel:

    - ezt a parancsot csak parancssorban lehet kiadni, nincs GUI (pl. jobb klikk + ...)megfelelője, de ezt követően megjelenik pl. a rendszerben (Sajátgépben) egy Z: meghajtó, amiben elérhető az eredeti mappa tartalma, amely megintcsak Z:-től mint gyökértől számított legfeljebb 260 karakteres útvonalhosszon keresztül kezelhető.
    - ha ez nem elég, akkor a Z: valamely alkönyvtárára is kiadható újabb SUBST y: z.\mappa1\mappa2 parancs, és így tovább
    - ezek a leképezések a SUBST z: /d parancs kiadásáig, vagy újraindításig élnek.

    Hosszabb távon érdemes átgondolni a mappanevek lerövidítését, mert érhetnek kellemetlen meglepetések.

    [ Szerkesztve ]

    Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

Új hozzászólás Aktív témák