22Aug

Γιατί τα Windows Reporting αυτού του φακέλου είναι πολύ μακριά για να αντιγράψετε;

Εάν εργάζεστε με Windows αρκετά καιρό, ειδικά με φακέλους και αρχεία που έχουν μακρά ονόματα, θα τρέξετε ένα παράξενο σφάλμα: Τα Windows θα αναφέρουν ότι η διαδρομή του φακέλου ή το όνομα του αρχείου είναι πολύ μεγάλη για να μετακινηθείτε σε έναν νέο προορισμό ή ακόμα και να διαγράψετε.Ποιο είναι το πρόβλημα?

Hey How-To Geek!

Έτσι, την άλλη μέρα, αναδιοργάνωσα ορισμένα αρχεία στον υπολογιστή μου, δημιουργώντας φακέλους, τέτοια πράγματα.Στη συνέχεια, όταν μετέφερα μερικά αρχεία σε ένα φάκελο, έλαβα ένα μήνυμα, δηλώνοντας ότι η διαδρομή του φακέλου που προέκυψε θα ήταν πολύ μεγάλη.Ήμουν μπερδεμένος.Γνωρίζω ότι κάθε OS από το DOS υποστηρίζει Long Filenames, αλλά τα Windows υποστηρίζουν ότι η διαδρομή είναι πολύ μεγάλη;Γιατί συμβαίνει αυτό;

Sincerly,

Ο κ. Αποδιοργανωμένος

Το πρόβλημα που αντιμετωπίζετε είναι μια δυσάρεστη διασταύρωση δύο συστημάτων που, σε περιπτώσεις όπως αυτό, αποδίδουν ένα λάθος.Για να καταλάβουμε από πού προέρχεται το σφάλμα, πρέπει να ανακαλύψουμε την ιστορία των μακροχρόνιων ονομάτων αρχείων( LFN) και τον τρόπο με τον οποίο τα Windows αλληλεπιδρούν μαζί τους πριν προχωρήσουμε σε λύσεις.

Τα μακροχρόνια ονόματα αρχείων εισήχθησαν, μέσω της αρχικής αρχιτεκτονικής MS-DOS, στα Windows 95. Το νέο σύστημα LFN επέτρεψε ονόματα αρχείων και καταλόγων έως 255 χαρακτήρων.Αυτή ήταν μια ευπρόσδεκτη επέκταση του προηγούμενου συστήματος ονόματος αρχείου, που ονομάζεται συνήθως 8.3 ονομασία αρχείων επειδή το όνομα περιορίστηκε σε οκτώ χαρακτήρες και επέκταση τριών ψηφίων, αλλά επίσης γνωστό ως Short Filename( SFN).Όπως μπορείτε να φανταστείτε, τότε υπήρχαν ακόμα πολλές εφαρμογές που βασίζονταν στο DOS και υπήρχαν περισσότεροι από μερικοί πονοκεφάλοι που προσπαθούσαν να πάρουν τα νεότερα LFNs και τα παλαιότερα SFNs να παίζουν ωραία μεταξύ τους.Εάν συναντήσατε ποτέ μια παλαιότερη δισκέτα ή CD-ROM με παράξενα κολοβωμένα αρχεία( όπως abcdef ~ 1.txt), αυτό το όνομα αρχείου κόπηκε από κάποια παλαιότερη εφαρμογή που χρησιμοποιεί SFN από κάποια μακρύτερη και μη υποστηριζόμενη LFN( όπως abcdefghijk.κείμενο).

Είμαστε πολύ μακριά από τα μέσα της δεκαετίας του '90, ωστόσο, και το όλο θέμα Long Filename( ως επί το πλείστον) είναι σταθερά σιδερωμένο.Εάν εκτελείτε μια έκδοση των Windows από τα τελευταία 10 χρόνια, πιθανότατα δεν θα συναντήσετε ούτε καν μια διένεξη μήκους αρχείου, όπως εμείς που χρησιμοποιήσαμε για να τρέξουμε πίσω στις DOS / Windows 95 ημέρες.Ωστόσο, εξακολουθούμε να αντιμετωπίζουμε λόξυγκας, όπως ανακαλύψατε με το πρόγραμμα καθαρισμού του δίσκου.Μα γιατί?Εάν το σύστημα "Long Filename" των Windows υποστηρίζει φακέλους και ονόματα αρχείων έως και 255 χαρακτήρες ανά στοιχείο, σε ποιο τοίχωμα τρέχετε;Δεν μπορούμε να κατηγορούμε το NTFS( το σύστημα αρχείων που χρησιμοποιεί η συντριπτική πλειοψηφία των σύγχρονων μηχανών των Windows), καθώς το NTFS θα υποστηρίξει την αλυσιδωτή σύνδεση των φακέλων και των ονομάτων των αρχείων μέχρι ένα συνολικό μήκος διαδρομής 32.767 χαρακτήρων.Αυτό υπερβαίνει κατά πολύ την τυπική δομή καταλόγου που οι περισσότεροι χρήστες θα χρειαστούν ποτέ.

Όπου όλα καταρρέουν είναι ένας τεχνητός περιορισμός των Windows στοίβες πάνω από το σύστημα LFN / NTFS: η μεταβλητή MAX_PATH.Η μεταβλητή MAX_PATH καθορίζει ότι μια πλήρης δομή καταλόγου στα Windows δεν μπορεί να υπερβαίνει τους 260 συνολικά χαρακτήρες, συμπεριλαμβανομένου του γράμματος μονάδας δίσκου, του παχέος εντέρου, της ανάστροφης κάθετοσης και της μηδενικής αντίδρασης στο τέλος.Επομένως, έχετε μόνο δυνητικό πραγματικό MAX_PATH 256 χαρακτήρων, π.χ. C: \ η διαδρομή 256 χαρακτήρων \ .

Έτσι, τι έγινε όταν καθαρίζονταν τον υπολογιστή σας είναι ότι είχατε έναν κατάλογο με μια ήδη μακρά διαδρομή( είτε επειδή τα ονόματα φακέλων ήταν μακρά, τα ονόματα αρχείων ήταν μακρά ή και τα δύο) και όταν επιχειρήσατε να μετακινήσετε ένα ή περισσότερατων εν λόγω καταλόγων σε έναν άλλο κατάλογο με μεγάλη διαδρομή, το συνολικό μήκος του ονόματος διαδρομής υπερέβη το όριο των 260 χαρακτήρων που επέβαλε η μεταβλητή MAX_PATH.

Τώρα, μπορεί να σκέφτεστε "Ah-hah!Θα αλλάξουμε μόνο τη μεταβλητή MAX_PATH και θα λύσουμε το πρόβλημα! "Αλίμονο, δεν είναι τόσο απλό.Όχι μόνο η μεταβλητή MAX_PATH είναι ουσιαστικά σκληρά κωδικοποιημένη στα Windows, αλλά ακόμα κι αν περάσατε από την τεράστια ταλαιπωρία της αλλαγής, θα καταλήγατε να σπάσετε τόσο πολύ που δεν αξίζει τον κόπο.Πολλές εφαρμογές αναμένουν ότι η μεταβλητή διαδρομής θα είναι αυτή που τα Windows έχει καθορίσει εδώ και καιρό.Δεν μπορούμε απλώς να το αλλάξουμε χωρίς να δημιουργούμε τεράστιο χάος.

Πού σας αφήνει αυτό;Λοιπόν, η απλούστερη λύση είναι απλά να επεξεργαστείτε τα δεδομένα διαδρομής.Για παράδειγμα, αν έχετε έναν τόνο αποθηκευμένων άρθρων όπου η εφαρμογή / επέκταση που χρησιμοποιήσατε για να τα αποθηκεύσετε από το διαδίκτυο δημιούργησε έναν κατάλογο ο οποίος ήταν ο πλήρης τίτλος του άρθρου + το οδηγό άρθρου και, στη συνέχεια, το ίδιο το όνομα αρχείου είναι ο πλήρης τίτλοςτου άρθρου + το άρθρο οδηγεί, θα ήταν πολύ απλό να χτυπήσει ή να υπερβεί το MAX_PATH με μία μόνο αποθήκευση.Η επεξεργασία αυτών των τεράστιων τίτλων φακέλων και άρθρων σε ένα πιο λογικό μέγεθος είναι ένας εύκολος τρόπος για να διορθώσετε το πρόβλημα.

Αν έχετε τεράστιο αριθμό αρχείων με μεγάλη διαδρομή και δεν θέλετε να τα επεξεργαστείτε όλα( ή αν θέλετε να διαγράψετε έναν τόνο παλιών καταλόγων που είναι πολύ μεγάλος για να αντιμετωπίσουν τα Windows όταν περιορίζονται από τοMAX_PATH), υπάρχει μια γραμμή εντολών γύρω από την εργασία.Παρόλο που τα Windows περιορίζονται από τη μεταβλητή MAX_PATH, οι μηχανικοί των Windows συνειδητοποίησαν ότι θα υπάρξουν καταστάσεις στις οποίες οι χρήστες θα πρέπει να ασχολούνται με μεγαλύτερα ονόματα διαδρομών.Ως εκ τούτου, το API των Windows έχει μια λειτουργία για την αντιμετώπιση εξαιρετικά μεγάλων διαδρομών.

Για να εκμεταλλευτείτε αυτό το API και να χρησιμοποιήσετε εργαλεία γραμμής εντολών στους δύσχρηστους φακέλους / ονόματα αρχείων σας, απλά πρέπει να προσθέσετε το όνομα του καταλόγου με μερικούς επιπλέον χαρακτήρες.Για παράδειγμα, εάν είχατε μια τεράστια δομή καταλόγου που θέλετε να διαγράψετε( αλλά λάβατε λάθος λόγω του μήκους διαδρομής όταν την επιχειρήσατε), μπορείτε να αλλάξετε την εντολή από:

rmdir c: \ documents \ some-really-super-

σε:

rmdir \\? \ c: \ documents \ some-really-super-long-folder-name-scheme \

Το κλειδί είναι η προσθήκη του τμήματος \\\\πριν από την έναρξη της διαδρομής του αρχείου.αυτό δίνει εντολή στα Windows να αγνοήσουν τους περιορισμούς που επιβάλλει η μεταβλητή MAX_PATH και να αλληλεπιδρούν με τη διαδρομή που μόλις παρείχατε, όπως παρέχεται / γίνεται κατανοητή απευθείας από το σύστημα αρχείων που υποκρύπτεται( το οποίο μπορεί να υποστηρίξει σαφώς μια μεγαλύτερη διαδρομή).Όπως πάντα, να είστε προσεκτικοί στη γραμμή εντολών για να αποφύγετε τυχόν διαγραφή αρχείων ή καταλόγων που σκοπεύατε να αφήσετε άθικτο.

Εάν η περίληψή μας σχετικά με αυτό το ζήτημα έχει σας περίεργη, σίγουρα θα βρεθείτε σε αυτό το άρθρο από τη βιβλιοθήκη Microsoft Developer Network, ονομάζοντας αρχεία, διαδρομές και ονοματοθεσία για περισσότερες πληροφορίες σχετικά με το τι συμβαίνει κάτω από την κουκούλα.

Έχετε μια πιεστική τεχνολογική ερώτηση;Στείλτε μας ένα email στο [email protected] και θα κάνουμε το καλύτερο δυνατό για να το απαντήσουμε.