22Aug

מדוע Windows מדווח על תיקיה זו ארוכה מדי להעתקה?

click fraud protection

אם אתה עובד עם Windows מספיק זמן, במיוחד עם תיקיות וקבצים בעלי שמות ארוכים, אתה נתקל בשגיאה מוזרה: Windows ידווח כי נתיב התיקיה או שם הקובץ ארוך מדי כדי לעבור ליעד חדש או אפילו למחוק.מה העניין?

היי How-Geek!

אז לפני כמה ימים, הייתי reorganizing כמה קבצים במחשב שלי, יצירת תיקיות, דברים כאלה.ואז, כשהעברתי כמה קבצים לתוך תיקיה, אני מקבל הודעה, וציין כי נתיב התיקיה שהתקבל יהיה ארוך מדי.הייתי מבולבל.אני יודע שכל מערכת הפעלה אחת מאז DOS תומך שמות קבצים ארוכים, אך Windows טוען כי הנתיב הוא ארוך מדי?למה זה קרה?

בכבוד רב,

מר מאורגן

הבעיה שאתה נתקל היא צומת מצער של שתי מערכות, כי במקרים כאלה, מניב שגיאה.כדי להבין בדיוק מהיכן מגיעה השגיאה, עלינו לחפור לתוך ההיסטוריה של שמות קבצים ארוכים( LFN) וכיצד Windows מקיים אינטראקציה עם אותם לפני שאנו מתפתחים לתוך פתרונות.

שמות קבצים ארוכים הוכנסו, באמצעות הארכיטקטורה MS-DOS הבסיסית, ב- Windows 95. מערכת LFN החדשה אפשרה שמות קבצים וספריות של עד 255 תווים.זה היה הרחבה מבורכת של שם הקובץ הקודם המערכת, בדרך כלל נקרא 8.3 filenaming כי השם היה מוגבל שמונה תווים ושלושה ספרות הרחבה, אך ידוע גם בשם קובץ קצר( SFN).כפי שאתה יכול לדמיין, אז היו עדיין הרבה יישומים מבוססי DOS סביב היו יותר מכמה כאבי ראש מנסה להשיג את LFNs החדש ואת SFNs מדור קודם לשחק נחמד אחד עם השני.אם אי פעם נתקלת בדיסקט ישן יותר או בתקליטור עם קבצים מקוצצים בצורה מוזרה( כמו abcdef ~ 1.txt), שם קובץ זה נחתך על ידי יישום מורשת של SFN באמצעות חלק מה- LFN ארוך יותר ולא נתמך( כמו abcdefghijk.טקסט).

instagram viewer

אנחנו דרך ארוכה מאמצע שנות התשעים, עם זאת, ואת כל שם הקובץ המלא הוא( על פי רוב) מגוהץ היטב.אם אתה משתמש בגירסה של Windows מ -10 השנים האחרונות, סביר להניח שאף פעם לא תיתקל בסכסוך של אורך קובץ כמו שאנחנו נהגנו להריץ בחזרה ב- DOS / Windows 95 ימים.עם זאת, אנחנו עדיין נתקלים שיהוקים, כפי שגילית עם פרויקט ניקוי הדיסק שלך.אבל למה?אם מערכת 'קבצים ארוכים' של Windows תומכת בתיקיות ובשמות קבצים של עד 255 תווים לכל רכיב, באיזה קיר אתה נתקל?אנחנו לא יכולים להאשים את NTFS( מערכת הקבצים כי הרוב המכריע של מכונות Windows המודרניות להשתמש) כמו NTFS יתמוך שרשור של תיקיות ושמות קבצים עד אורך נתיב כולל של 32,767 תווים.זה עולה בהרבה על מבנה הספריות טיפוסי רוב המשתמשים היה צריך אי פעם.

איפה הכל מתמוטט היא הגבלה מלאכותית Windows ערימות על גבי מערכת LFN / NTFS: המשתנה MAX_PATH.המשתנה MAX_PATH מציין שמבנה ספריות מלא ב- Windows לא יעלה על 260 תווים, כולל אות הכונן, המעי הגס, קו נטוי הפוך ותגובת ריק ב- null בסוף.לכן יש לך רק MAX_PATH פוטנציאלי של 256 תווים, למשל C: \ your-256-character-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-תיקייה-שם-ערכת \

:

rmdir \\? \ c: \ Documents \ some-really-super-long-long-folder-name-schem \

המפתח הוא תוספת של \\? \ partלפני תחילת נתיב הקובץ;דבר זה מורה ל- Windows להתעלם מהמגבלות שהוטלו על-ידי המשתנה MAX_PATH ולפעול עם הנתיב שסיפקת זה עתה כמסופק / מובנה ישירות על-ידי מערכת הקבצים הבסיסית( אשר יכולה לתמוך בבירור בנתיב ארוך יותר).כמו תמיד, לנקוט משנה זהירות בשורת הפקודה כדי למנוע בטעות מחיקת קבצים או ספריות אתה מתכוון להשאיר שלם.

אם הסקירה הכללית שלנו בנושא זה מסקרנת אותך, בהחלט חפץ במאמר זה מתוך ספריית Microsoft Developer Network, שמות השמות, הנתיבים ושמות השמות, לקבלת מידע נוסף על מה שמתרחש מתחת למכסה המנוע.

יש שאלה הקש הקשה?תירה לנו דוא"ל בכתובת [email protected] ואנו נעשה כמיטב יכולתנו לענות על זה.