Η διαδρομή στόχου είναι πολύ μεγάλη. Εάν ένα αρχείο με μεγάλο όνομα δεν διαγραφεί και εμφανιστεί σφάλμα ότι το σύστημα αρχείων δεν υποστηρίζει τόσο μεγάλα ονόματα

Σε ένα από τα έργα είχα την ευκαιρία να χρησιμοποιήσω το module για επικύρωση Drupal - clientside. Και δεν είναι ότι η ενότητα είναι κακή, αντιθέτως, εκτελεί πλήρως τη λειτουργικότητά της, δηλαδή, ελέγχει τη φόρμα στην πλευρά του πελάτη. Αλλά τα αρχεία λειτουργιών έχουν αρκετά μεγάλα ονόματα και εξαιτίας ενός από αυτά τα αρχεία, το git μας σταμάτησε να λειτουργεί επαρκώς. Επειδή δεν μπορούσα πλέον να γράψω πληροφορίες σε αυτόν τον φάκελο λόγω του ακόλουθου σφάλματος:

Δεν είναι δυνατή η αντιγραφή αρχείου/φάκελου. Όνομα αρχείου στόχευσης/διαδρομή προορισμού πολύ μεγάλη

Ή επίσης, αλλά στα αγγλικά:

Τα ονόματα αρχείου θα είναι πολύ μεγάλα για τον φάκελο προορισμού. Μπορείτε να συντομεύσετε το όνομα του αρχείου και να δοκιμάσετε ξανά ή να δοκιμάσετε μια τοποθεσία που έχει μικρότερη διαδρομή.

Μετά από μια μικρή έρευνα, αποδείχθηκε ότι το μέγιστο μήκος διαδρομής που υποστηρίζεται από τα Windows 7 είναι 260 χαρακτήρες. Και αφού όλα τα έργα είναι αποθηκευμένα στον φάκελο μου C:\Users\\Documents\xampp\htdocs\git\- τότε όλα τα έργα ήταν δυνητικά σε κίνδυνο.

Επιλογές λύσης

Είδα 2 πιθανές λύσεις:

1. Μετακινήστε το xampp στην κεφαλή του δίσκου

2. Δημιουργήστε ένα ψευδώνυμο για αυτήν τη διαδρομή (Για παράδειγμα, μια μονάδα δίσκου με το όνομα H)

Η δεύτερη επιλογή φάνηκε πιο απλή, γιατί για το xampp τα μονοπάτια δεν θα αλλάξουν, αλλά με το git θα έχουμε πρόσβαση στους φακέλους μέσω του δημιουργημένου ψευδωνύμου. Λοιπόν, για να λειτουργήσει σωστά το IDE, θα πρέπει να αλλάξετε τη διαδρομή των έργων.

Και έτσι, για να αντικαταστήσουν τα Windows το όνομα της μονάδας δίσκου για τη μεγάλη διαδρομή σας, εκτελέστε την εντολή μέσω cmd:

Υποτμήμα H: C:\Users\\Documents\xampp\htdocs\git\

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

Αυτό το άρθρο εξετάζει τρόπους για να απαλλαγείτε από αυτό το λείψανο κατά την ανάπτυξη εφαρμογών σε διάφορες πλατφόρμες (WinApi, .Net Framework, .Net Core) και την ενεργοποίηση της εγγενούς υποστήριξης για μεγάλες διαδρομές στα Windows 10 (Ενημέρωση επετείου).

Κερδίστε εφαρμογές API

Σε εφαρμογές που χρησιμοποιούν το Win API για εργασία με αρχεία, η συνταγή για την απαλλαγή από τον περιορισμό MAX_PATH είναι γνωστή από αμνημονεύτων χρόνων - ήταν απαραίτητο να χρησιμοποιηθεί η έκδοση Unicode της συνάρτησης με το τέλος "W" για να εργαστείτε με έναν κατάλογο ή αρχείο και ξεκινήστε τη διαδρομή με το πρόθεμα \\?\. Αυτό κατέστησε δυνατή τη χρήση μονοπατιών μήκους έως 32767 χαρακτήρων.

Στα Windows 10 (1607), η συμπεριφορά των λειτουργιών για την εργασία με αρχεία έχει αλλάξει: είναι πλέον δυνατό να απενεργοποιήσετε τον έλεγχο των περιορισμών MAX_PATH σε επίπεδο συστήματος.

Αυτό επηρέασε τις ακόλουθες λειτουργίες:

Για να εργαστείτε με καταλόγους: CreateDirectoryW, CreateDirectoryExW, GetCurrentDirectoryW, RemoveDirectoryW, SetCurrentDirectoryW. Και για εργασία με αρχεία: CopyFileW, CopyFile2, CopyFileExW, CreateFileW, CreateFile2, CreateHardLinkW, CreateSymbolicLinkW, DeleteFileW, FindFirstFileW, FindFirstFileExW, FindNextFileW, GetFileAttributesW, GetFilexWWFi, Get ongPathNameW, MoveFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW, FindFirstStreamW, FindNextStreamW, GetCompressedFileSizeW, GetFinalPathNameByHandleW.


Αυτό εξαλείφει την ανάγκη για το πρόθεμα \\?\ και δυνητικά δίνει στις εφαρμογές που εκτελούνται άμεσα ή έμμεσα μέσω του Win API την ευκαιρία να αποκτήσουν υποστήριξη για μεγάλες διαδρομές χωρίς να χρειάζεται να τις ξαναδημιουργήσουν. Ο τρόπος ενεργοποίησης αυτής της δυνατότητας περιγράφεται στο τέλος του άρθρου.

.Πλαίσιο δικτύου

Παρόλο που το .Net Framework χρησιμοποιεί το Win API για να εργαστεί με αρχεία, η προηγούμενη αλλαγή δεν θα είχε αποτελέσματα, επειδή Ο κώδικας BCL έχει ενσωματωμένους προκαταρκτικούς ελέγχους για το επιτρεπτό του μήκους του καταλόγου και των ονομάτων αρχείων, και δεν έφτασε καν στο σημείο να καλέσει λειτουργίες Win API, κάνοντας μια γνωστή εξαίρεση. Λόγω πολυάριθμων αιτημάτων από την κοινότητα (περισσότερα από 4500 στο UserVoice), στην έκδοση 4.6.2, οι έλεγχοι για περιορισμούς μήκους διαδρομής αφαιρέθηκαν από τον κώδικα BCL, αφήνοντας αυτό το λειτουργικό σύστημα και τα συστήματα αρχείων!

Να τι δίνει:

  • Χρησιμοποιώντας το πρόθεμα "\\?\" μπορούμε να εργαστούμε με μεγάλες διαδρομές όπως στο Win API, Directory.CreateDirectory("\\\\?\\" + long_dir_name);
  • Εάν ενεργοποιήσετε την εγγενή υποστήριξη για μεγάλα ονόματα αρχείων στα Windows 10 (1607), δεν θα χρειαστεί καν να χρησιμοποιήσετε πρόθεμα!
Πώς να το ενεργοποιήσετε:
  • Χρησιμοποιήστε το .Net Framework 4.6.2 ως στόχο κατά τη δημιουργία της εφαρμογής.
  • Χρησιμοποιήστε ένα αρχείο διαμόρφωσης, για παράδειγμα, εάν η εφαρμογή έχει ήδη δημιουργηθεί στο .Net 4.0:

.Net Core

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

Πώς να το ενεργοποιήσετε:
Όλα λειτουργούν από το κουτί. Σε αντίθεση με την υλοποίηση στο .Net Framework, δεν χρειάζεται να προσθέσετε το πρόθεμα "\\?\" - προστίθεται αυτόματα εάν είναι απαραίτητο.

Εδώ μπορείτε να δείτε ένα παράδειγμα.

Πώς να ενεργοποιήσετε την υποστήριξη για μεγάλες διαδρομές στα Windows 10 (1607)

Αυτή η δυνατότητα είναι απενεργοποιημένη από προεπιλογή. Αυτό συμβαίνει επειδή αυτή η δυνατότητα είναι πειραματική και πρέπει να αναπτυχθούν διάφορα υποσυστήματα και εφαρμογές για πλήρη υποστήριξη.

Μπορείτε να ενεργοποιήσετε την ενσωματωμένη υποστήριξη για μεγάλες διαδρομές δημιουργώντας ή αλλάζοντας την ακόλουθη παράμετρο μητρώου συστήματος: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled παράμετρος (Τύπος: REG_DWORD) 1 – αντιστοιχεί στην ενεργοποιημένη τιμή.

Ή μέσω πολιτικών ομάδας (Win+R\gpedit.msc) Διαμόρφωση υπολογιστή > Πρότυπα διαχείρισης > Σύστημα > Σύστημα αρχείων > Ενεργοποίηση μεγάλων διαδρομών NTFS.Είναι το ίδιο σε μια τοπική έκδοση: Διαμόρφωση υπολογιστή > Πρότυπα διαχείρισης > Σύστημα > Σύστημα αρχείων > Ενεργοποίηση μεγάλων διαδρομών Win32.

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

αληθής
Δυστυχώς, αυτό δεν θα λειτουργήσει με το CMD αυτή τη στιγμή, λόγω των ιδιαιτεροτήτων της εργασίας με μονοπάτια, αλλά στο PowerShell όλα θα πρέπει να λειτουργούν.

ΥΣΤΕΡΟΓΡΑΦΟ.

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

Σας ευχαριστώ για την προσοχή σας!

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

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

Στην πραγματικότητα, το πρόβλημα μπορεί να λυθεί πολύ απλά και γρήγορα, και τώρα θα περιγράψω δύο μεθόδους για την επίλυσή του και εναπόκειται σε εσάς να αποφασίσετε ποια θα χρησιμοποιήσετε.

Τι να κάνετε εάν η διαδρομή προς την πηγή είναι πολύ μεγάλη, πώς να διαγράψετε ένα τέτοιο αρχείο;

Εάν έχετε ένα αρχείο που δεν έχει διαγραφεί λόγω μεγάλου ονόματος, υπάρχουν πολλές επιλογές για την επίλυση του προβλήματος. Για παράδειγμα, ένα αρχείο είναι ένθετο σε πολλούς καταλόγους, ας πούμε πέντε ή ακόμα και δέκα φακέλους που έχουν ονόματα 10-20 χαρακτήρων, τότε αυτός μπορεί να είναι ο λόγος για τη μη διαγραφή του αρχείου. Το γεγονός είναι ότι τα Windows δεν υποστηρίζουν αρχεία των οποίων τα ονόματα έχουν περισσότερους από 260 χαρακτήρες. Εάν ξεπεραστεί αυτό το όριο, θα εμφανιστεί το σφάλμα που έδειξα παραπάνω. Ο αριθμός των φακέλων με τα δικά τους ονόματα και το ίδιο το όνομα αρχείου θα πρέπει συνολικά να είναι λιγότεροι από 260 χαρακτήρες. Το σύστημα έχει επίσης ένα χαρακτηριστικό - αν ξεπεραστεί αυτό το όριο, μπορούμε να μετονομάσουμε φακέλους. Αυτό σημαίνει ότι πρέπει να μετονομάσετε όλους τους φακέλους σε ένα σύντομο όνομα, για παράδειγμα, ένα γράμμα ή έναν αριθμό.


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

Μέθοδος δεύτερηθα βοηθήσει αν το πρώτο απέτυχε. Το γεγονός είναι ότι δεν μπορούν να μετονομαστούν όλοι οι φάκελοι που οδηγούν σε ένα αρχείο με μεγάλο όνομα και θα προκύψει το ίδιο σφάλμα συστήματος αρχείων. Στη συνέχεια, μπορείτε να δημιουργήσετε έναν εικονικό δίσκο χρησιμοποιώντας οποιονδήποτε από τους υποφακέλους που οδηγούν στο μη διαγράψιμο αρχείο. Τώρα θα σας δείξω πώς να το κάνετε αυτό.

Ανοίξτε τη γραμμή εντολών. Για να το κάνετε αυτό, πατήστε το συνδυασμό Win+R και πληκτρολογήστε την εντολή cmd. Μπορείτε να κάνετε δεξί κλικ στο μενού Έναρξη (ή στο συνδυασμό πλήκτρων Win+X) και να επιλέξετε Γραμμή εντολών εκεί.

Τώρα γράφετε μια εντολή που θα δημιουργήσει έναν εικονικό δίσκο για εμάς:

Πρέπει να επιλέξετε ένα γράμμα μονάδας δίσκου που δεν καταλαμβάνεται από άλλους. Το διαμέρισμα συστήματος συνήθως υποδεικνύεται ως C και το δεύτερο διαμέρισμα ως D ή E και, στη συνέχεια, επιλέξτε οποιοδήποτε άλλο.

Η διαδρομή προς το φάκελο πρέπει να καθοριστεί από το δίσκο. Εάν αυτό είναι δύσκολο για εσάς, ανοίξτε το φάκελο που θα λειτουργεί ως εικονικός δίσκος και αντιγράψτε τη διαδρομή προς αυτόν στον Explorer στο επάνω μέρος.

Η εντολή μου μοιάζει με αυτό:

Όταν πάμε στο My Computer, θα πρέπει να δείτε μια μονάδα δίσκου εκεί με το γράμμα που της αντιστοιχίσαμε από τη γραμμή εντολών. Έτσι, η διαδρομή προς το αρχείο θα μειωθεί σχεδόν στο μισό, πράγμα που σημαίνει ότι το συνολικό μήκος των χαρακτήρων μπορεί να είναι μικρότερο από 260 χαρακτήρες. Τώρα μπορείτε να προσπαθήσετε να απαλλαγείτε από το μη διαγράψιμο.


Για να διαγράψετε έναν εικονικό δίσκο πρέπει να εισάγετε την εντολή:

substDiskLetter/d

Χρησιμοποιώντας το Total Commander

Στο Διαδίκτυο, ανακάλυψα μια μέθοδο που σας επιτρέπει να διαγράψετε αρχεία που δεν μπορούν να διαγραφούν χρησιμοποιώντας το . Φυσικά, το μειονέκτημα εδώ είναι ότι θα πρέπει να εγκαταστήσετε πρόσθετο λογισμικό στον υπολογιστή σας και δεν θα θέλουν όλοι να το κάνουν αυτό. Σε κάθε περίπτωση, θα αφήσω αυτήν τη μέθοδο εδώ σε περίπτωση που κάποιος θέλει να τη χρησιμοποιήσει.

Κατεβάστε και εγκαταστήστε το πρόγραμμα. Ας πάμε στην καρτέλα "Αρχείο"κάντε κλικ στην ενότητα "Αλλαγή ιδιοτήτων". Εμφανίζεται ένα παράθυρο όπου αφαιρούμε τα σημάδια επιλογής από όλα τα χαρακτηριστικά. Εάν δεν υπάρχει σημάδι επιλογής δίπλα στο στοιχείο στην κορυφή "Επεξεργασία περιεχομένων καταλόγου"- επιλέξτε. Τώρα από το ίδιο πρόγραμμα προσπαθούμε να διαγράψουμε ένα αρχείο με μεγάλο όνομα.


Χρησιμοποιούμε την αρχειοθέτηση 7-Zip

Για αυτήν την εργασία θα χρειαστούμε έναν αρχειοθέτη 7 Zip. Κάντε δεξί κλικ στον αρχικό κατάλογο και τοποθετήστε το ποντίκι στο διαμέρισμα "7-Zip"και επιλέξτε το στοιχείο "Προσθήκη στο αρχείο".

Εμφανίζεται ένα παράθυρο στο οποίο πρέπει να επιλέξετε μόνο ένα πλαίσιο. "Διαγραφή αρχείων μετά από συμπίεση". Στη συνέχεια, κάντε κλικ στο OK.

Ένα αρχείο με όλα αυτά τα πράγματα δημιουργείται στην επιφάνεια εργασίας και οι φάκελοι με μεγάλα αρχεία απλώς διαγράφονται. Μπορείτε να διαγράψετε το ίδιο το αρχείο χωρίς κανένα πρόβλημα.

Αυτοί είναι οι τρόποι που εξετάσαμε για να διορθώσουμε το σφάλμα μη διαγραφής του αρχείου. Ίσως έχετε άλλες επιλογές για το πώς να το κάνετε αυτό;

Δεν είναι μυστικό ότι η Εξερεύνηση των Windows, όπως και οι περισσότερες άλλες εφαρμογές των Windows, συμπεριλαμβανομένου του PowerShell, δεν μπορεί να λειτουργήσει με αντικείμενα συστήματος αρχείων με ένθεση σε βάθος φακέλων. το μήκος διαδρομής του οποίου υπερβαίνει τους 260 χαρακτήρες. Επιπλέον, αυτός ο περιορισμός υπάρχει μόνο σε επίπεδο εφαρμογής και το ίδιο το σύστημα αρχείων NTFS υποστηρίζει διαδρομές αρχείων μέχρι 32767 χαρακτήρες.

Αυτός ο περιορισμός επιβάλλεται από τη βιβλιοθήκη Win32 API, και του οποίου το μέγιστο μήκος διαδρομής είναι 260 χαρακτήρες ( MAX_PATH=260). Γενικά, η διαδρομή σχηματίζεται από τα ακόλουθα στοιχεία: +[path_of_256_characters]+[ ] , και το μέγιστο μήκος ενός καταλόγου/αρχείου στο NTFS είναι 255 χαρακτήρες στο Unicode. Όταν χρησιμοποιείτε λειτουργίες Unicode API, μπορείτε να χρησιμοποιήσετε τη διαδρομή προς 32767 χαρακτήρες. Χάρη σε αυτό, πολλά προγράμματα τρίτων (για παράδειγμα, οι ίδιοι δημοφιλείς διαχειριστές αρχείων ΜΑΚΡΙΑΚαι Συνολικός Διοικητής) χωρίς καμία δυσκολία επεξεργάζεται αρχεία/φακέλους των οποίων το μήκος διαδρομής υπερβαίνει τους 260 χαρακτήρες.

Συμβουλή. Μπορείτε να παρακάμψετε αυτόν τον περιορισμό του Win32 API και να εργαστείτε με μεγάλα ονόματα αρχείων χρησιμοποιώντας τη μορφή διαδρομής UNC, καθορίζοντας την απόλυτη διαδρομή προς το αρχείο χρησιμοποιώντας το πρόθεμα διαδρομής εκτεταμένου μήκους \\?\ . Για παράδειγμα, όπως αυτό \\?\C:\SomeLongPath\LongNameFile.txt

Αυτός ο περιορισμός δεν ισχύει επίσης όταν οι χρήστες έχουν πρόσβαση δικτύου σε αρχεία μέσω του πρωτοκόλλου SMB (εξαιτίας αυτού, οι δομές καταλόγου με μεγάλες διαδρομές είναι κοινές σε διακομιστές αρχείων με δεδομένα χρήστη). Ο διαχειριστής που διατηρεί αυτόν τον διακομιστή δεν μπορεί να διαχειριστεί (διαγράψει/μετακινήσει) αρχεία με μεγάλες διαδρομές μέσω της τυπικής διεπαφής της Εξερεύνησης των Windows. Όταν προσπαθείτε να δημιουργήσετε/αντιγράψετε ένα αρχείο σε έναν τέτοιο κατάλογο, εμφανίζεται ένα σφάλμα:

Η διαδρομή προορισμού είναι πολύ μεγάλη. Τα ονόματα αρχείου θα είναι πολύ μεγάλα για τον φάκελο προορισμού. Μπορείτε να συντομεύσετε το όνομα του αρχείου και να δοκιμάσετε ξανά ή να δοκιμάσετε μια τοποθεσία που έχει συντομευμένη διαδρομή

Άλλα προγράμματα/πλαίσια διαλόγου ενδέχεται να αναφέρουν την παρουσία του περιορισμού με τον δικό τους τρόπο.

Συμφωνώ, είναι αστείο που είναι 2014 και μιλάμε ακόμα για το όριο των 260 χαρακτήρων στο μέγιστο μήκος διαδρομής στα Windows... Αλλά φαίνεται ότι δεν αναμένονται δραστικές αλλαγές στο εγγύς μέλλον, ακόμη και στην πιο πρόσφατη Windows 10 Technical Preview αυτός ο περιορισμός εξακολουθεί να υπάρχει.

Σε αυτό το άρθρο θα δείξουμε πώς στα Windows μπορείτε να εργαστείτε με αρχεία των οποίων η διαδρομή υπερβαίνει τους 260 χαρακτήρες. Σε αυτήν την περίπτωση, το καθήκον μας είναι να διαγράψουμε έναν κατάλογο που περιέχει αρχεία με μεγάλο μήκος διαδρομής.

Όταν προσπαθείτε να διαγράψετε έναν τέτοιο κατάλογο από τον Explorer, εμφανίζεται ένα σφάλμα:

Τα ονόματα αρχείου θα είναι πολύ μεγάλα για τον φάκελο προορισμού. Μπορείτε να συντομεύσετε το όνομα του αρχείου και να δοκιμάσετε ξανά ή να δοκιμάσετε μια τοποθεσία που έχει συντομευμένη διαδρομή.

Το Powershell δεν μπορεί επίσης να χειριστεί σωστά καταλόγους και αρχεία με μεγάλες διαδρομές που υπερβαίνουν τους 260 χαρακτήρες. Όταν προσπαθείτε να διαγράψετε έναν κατάλογο με τέτοια αρχεία (C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath), εμφανίζεται ένα σφάλμα:

Remove-Item .\verylongpath -Recurse

Remove-Item: Η καθορισμένη διαδρομή, το όνομα αρχείου ή και τα δύο είναι πολύ μεγάλα. Το πλήρως αναγνωρισμένο όνομα αρχείου πρέπει να είναι μικρότερο από 260
χαρακτήρες και το όνομα του καταλόγου πρέπει να είναι μικρότερο από 248 χαρακτήρες.
Στη γραμμή:1 char:1
+ Remove-Item .\verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C:\Install\MS S...it\verylongpath:String) , PathTooLongExcepti
επί
+ FullyQualifiedErrorId: RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

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

Mklink /d c:\install\link "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"

Μια άλλη επιλογή, που θυμίζει εργασία με συμβολικό σύνδεσμο, είναι η αντιστοίχιση του προβληματικού φακέλου σε έναν εικονικό δίσκο (στο παράδειγμά μας X:), μειώνοντας επίσης το μήκος της διαδρομής:

Υποτμήμα X: "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"

Τώρα μπορείτε να εργαστείτε με δεδομένα στη μονάδα δίσκου X:, οι διαδρομές προς αρχεία στα οποία δεν θα υπερβαίνουν το όριο. Μετά την ολοκλήρωση της εργασίας, μπορείτε να διαγράψετε τον εικονικό δίσκο:

Υποστ. Χ: /δ

Αλλά προσωπικά, αυτό που μου αρέσει περισσότερο για το έργο της διαγραφής δεδομένων σε τέτοιες καταστάσεις είναι η ικανότητα robocopy.exe, που υποστηρίζει την εργασία με μεγάλες διαδρομές.

Χρησιμοποιώντας την επιλογή /MIR, το βοηθητικό πρόγραμμα Robocopy μπορεί να δημιουργήσει ένα πλήρες αντίγραφο (καθρέφτη) του καταλόγου προέλευσης στον κατάλογο προορισμού. Και, εάν ο φάκελος προέλευσης είναι κενός, όλα τα δεδομένα στον φάκελο προορισμού διαγράφονται επίσης. Ας δημιουργήσουμε έναν κενό φάκελο C:\Install\testκαι χρησιμοποιώντας το όρισμα /MIR, αντιγράψτε τα περιεχόμενα του δοκιμαστικού φακέλου στον φάκελο προορισμού (εάν το όνομα του φακέλου περιέχει κενά ή κυριλλικούς χαρακτήρες, η διαδρομή πρέπει να περικλείεται σε εισαγωγικά).

Robocopy /MIR C:\Install\test "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"

Μετά την εκτέλεση της εντολής, τα περιεχόμενα του καταλόγου C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath διαγράφονται (αντικαθίστανται με τα περιεχόμενα του κενού καταλόγου).

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