Αρχική σελίδα » πως να » Γιατί τα Windows Reporting αυτού του φακέλου έχουν πολύ μεγάλη διάρκεια αντιγραφής;

    Γιατί τα Windows Reporting αυτού του φακέλου έχουν πολύ μεγάλη διάρκεια αντιγραφής;

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

    Γεια σου πώς να Geek!

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

    Ειλικρινά,

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

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

    Τα μεγάλα ονόματα αρχείων εισήχθησαν, μέσω της αρχικής αρχιτεκτονικής MS-DOS, στα Windows 95. Το νέο σύστημα LFN επέτρεψε ονόματα αρχείων και καταλόγων έως και 255 χαρακτήρων. Αυτή ήταν μια ευπρόσδεκτη επέκταση του προηγούμενου συστήματος ονόματος αρχείου, που ονομάζεται συνήθως 8.3 ονομασία αρχείων επειδή το όνομα περιορίστηκε σε οκτώ χαρακτήρες και επέκταση τριών ψηφίων, αλλά επίσης γνωστό ως Short Filename (SFN). Όπως μπορείτε να φανταστείτε, τότε υπήρχαν ακόμη πολλές εφαρμογές DOS που βασίζεται γύρω και υπήρχαν περισσότερο από μερικές πονοκεφάλους προσπαθεί να πάρει τα νεότερα LFNs και οι κληρονομιά δίκτυο μίας συχνότητας για να παίξει ωραία με το άλλο. Αν έχετε συναντήσει ποτέ ένα παλαιότερο δισκέτα ή 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: \ your-256-path-path \.

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

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

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

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

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

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

    προς το:

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

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

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


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