דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. חיפוש קובץ ב node.js

חיפוש קובץ ב node.js

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 3 כותבים 222 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מוטי אורןמ מנותק
    מוטי אורןמ מנותק
    מוטי אורן
    כתב ב נערך לאחרונה על ידי
    #1

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

    את החיפוש עצמו, חשבתי לעשות עם פונקציה רקורסיבית כזאת (אם למישהו יש רעיון יותר טוב אשמח לשמוע):

    function readdir(directory) {
        fs.readdir(directory, function (err, res) {
            if (err) console.log(err);
            console.log(res);
            for (let f of res) {
                if (f == arg) {
                    console.log('Found! in', directory);
                    process.exit(0);
                } else {
                    fs.stat(path.join(directory, f), function (err, stat) {
                        if (err) console.log(err);
                        if (stat.isDirectory()) {
                            readdir(path.join(directory, f));
                        }
                    })
                }
            }
        })
    }
    
    readdir('C:/');
    

    כמובן שבתחילת התוכנית אני מייבא את המודולים הנצרכים ומקבל את הארגומנט באמצעות process.argv:

    const fs = require('fs');
    const path = require('path');
    
    const arg = process.argv[2];
    

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

    yossizY dovidD 2 תגובות תגובה אחרונה
    1
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב למוטי אורן ב נערך לאחרונה על ידי
      #2

      @מוטי-אורן יש בעיה בשורה 3 ו-11 של הקוד. אתה בודק אם יש שגיאה, ואם יש אתה מדפיס לקונסול, אבל הקוד ממשיך לרוץ למרות השגיאה. זה גורם לשגיאות בהמשך הפונקציה בשורה 5 יש בעיה שבמקרה של שגיאה res הוא undefined ובשורה 8 יש בעיה שבמקרה של שגיאה stat הוא undefined. אתה צריך לעשות return אחרי ההדפסה לקונסול כאשר יש שגיאה.

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      מוטי אורןמ תגובה 1 תגובה אחרונה
      3
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        השיב למוטי אורן ב נערך לאחרונה על ידי
        #3

        @yossiz יפה מאוד, לא הצלחתי למצוא את זה..
        אפשר בטריק להדפיס ולצאת מהפונקציה באותה פקודה, ככה:

        function readdir(directory) {
            fs.readdir(directory, function (err, res) {
                if (err) return console.log(err);
                for (let f of res) {
                    if (f == arg) {
                        console.log('Found! in', directory);
                        process.exit(0);
                    } else {
                        fs.stat(path.join(directory, f), function (err, stat) {
                            if (err) return console.log(err);
                            if (stat?.isDirectory()) {
                                readdir(path.join(directory, f));
                            }
                        })
                    }
                }
            })
        }
        

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        yossizY תגובה 1 תגובה אחרונה
        5
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לdovid ב נערך לאחרונה על ידי
          #4

          @dovid אמר בחיפוש קובץ ב node.js:

          אפשר בטריק להדפיס ולצאת מהפונקציה באותה פקודה

          אני יודע. אבל בד"כ אני נמנע מזה (כאשר העצלות לא גוברת...) כי זה נראה שאתה רוצה להחזיר ערך. זו לא עבירה גדולה. אבל שווה לי המחיר של הסוגריים (שבכל מקרה אני נוהג להכניס גם עבור שורה אחת) כדי שהקוד יבטא יותר טוב את כוונת המשורר.

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          תגובה 1 תגובה אחרונה
          7
          • מוטי אורןמ מנותק
            מוטי אורןמ מנותק
            מוטי אורן
            השיב לyossiz ב נערך לאחרונה על ידי
            #5

            @yossiz @dovid תודה רבה על העזרה!

            תגובה 1 תגובה אחרונה
            3

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום