תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

    הורדה אוטומטית של קבצי csv מאתר ftp

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

      יש לי אתר FTP עם כמה קבצי CSV שאני צריך להוריד אותם כל זמן מסויים בשביל עדכון הקבצים במחשב אבל אני רוצה לקרוא לקובץ במערכת (EXE או כל אופציה אחרת) שיעשה את השלבים הבאים ימחוק את הקבצים הקיימים ויוריד לשם בחזרה את הקבצים מה FTP המעודכנים..
      אשמח לעזרה איך לעשות את זה בקלות ושיעבוד בצורה עצמאית לכל דבר..
      תודה רבה מראש 👍

      A shraga clickone 3 תגובות תגובה אחרונה תגובה ציטוט 0
      • A
        avi rz @אוריי נערך לאחרונה על ידי avi rz

        @אוריי
        לכאו' מה שהכי קל זה,
        בקוד CMD, ליצור קובץ bat או שתעשה מזה בסוף exe.
        ותקרא לו מתי שאתה רוצה.
        או אפי' תוכל לעשות לולאה שתחזור על הקוד כל פרק זמן מסוים.
        יש לך את זה

        תגובה 1 תגובה אחרונה תגובה ציטוט 2
        • shraga
          shraga @אוריי נערך לאחרונה על ידי shraga

          @אוריי

          בדיוק עבדתי על משהו דומה לאחרונה (בעזרתו האדיבה של אחד מנדיבי הפורום), אשמח לעזור מה שאוכל.
          אתה יכול להשתמש בקוד כזה:

          power shell

              #FTP Server Information - SET VARIABLES
              $ftp = "ftp://XXXXX" 
              $user = 'XXXXX' 
              $pass = 'XXXXX'
              $folder = 'XXXXX'
              $target = "XXXXX\"
          
              #SET CREDENTIALS
              $credentials = new-object System.Net.NetworkCredential($user, $pass)
          
              function Get-FtpDir ($url,$credentials) {
                  $request = [Net.WebRequest]::Create($url)
                  $request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
                  if ($credentials) { $request.Credentials = $credentials }
                  $response = $request.GetResponse()
                  $reader = New-Object IO.StreamReader $response.GetResponseStream() 
                  $reader.ReadToEnd()
                  $reader.Close()
                  $response.Close()
              }
          
              #SET FOLDER PATH
              $folderPath= $ftp + "/" + $folder + "/"
          
              $Allfiles=Get-FTPDir -url $folderPath -credentials $credentials
              $files = ($Allfiles -split "`r`n")
          
              $files 
          
              $webclient = New-Object System.Net.WebClient 
              $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass) 
              $counter = 0
              foreach ($file in ($files | where {$_ -like "*.*"})){
                  $source=$folderPath + $file  
                  $destination = $target + $file 
                  $webclient.DownloadFile($source, $target+$file)
          
                  #PRINT FILE NAME AND COUNTER
                  $counter++
                  $counter
                  $source
              }
          
          
          אוריי 2 תגובות תגובה אחרונה תגובה ציטוט 6
          • אוריי
            אוריי @shraga נערך לאחרונה על ידי

            @shraga
            אני לא כזה מבין בשפה הזו אולי תוכל לפרט לי יותר איך ובאיזה צורה להשתמש בזה

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • clickone
              clickone @אוריי נערך לאחרונה על ידי

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

              אין טסט כמו פרודקשן.

              המייל שלי urivpn@gmail.com

              אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 6
              • אוריי
                אוריי @clickone נערך לאחרונה על ידי אוריי

                @clickone אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

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

                לא ,
                אין לי אפשרות כזו אני חייב לעבוד בצורה אחרת

                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • אוריי
                  אוריי @shraga נערך לאחרונה על ידי

                  @shraga
                  הרצתי בפורשאל
                  וזה התשובה שקיבלתי

                  Exception calling "GetResponse" with "0" argument(s): "The remote server returned an error: (550) File unavailable
                  (e.g., file not found, no access)."
                  At line:15 char:9
                  +         $response = $request.GetResponse()
                  +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
                      + FullyQualifiedErrorId : WebException
                  
                  You cannot call a method on a null-valued expression.
                  At line:16 char:9
                  +         $reader = New-Object IO.StreamReader $response.GetResponseStr ...
                  +         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
                      + FullyQualifiedErrorId : InvokeMethodOnNull
                  
                  You cannot call a method on a null-valued expression.
                  At line:17 char:9
                  +         $reader.ReadToEnd()
                  +         ~~~~~~~~~~~~~~~~~~~
                      + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
                      + FullyQualifiedErrorId : InvokeMethodOnNull
                  
                  You cannot call a method on a null-valued expression.
                  At line:18 char:9
                  +         $reader.Close()
                  +         ~~~~~~~~~~~~~~~
                      + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
                      + FullyQualifiedErrorId : InvokeMethodOnNull
                  
                  You cannot call a method on a null-valued expression.
                  At line:19 char:9
                  +         $response.Close()
                  +         ~~~~~~~~~~~~~~~~~
                      + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
                      + FullyQualifiedErrorId : InvokeMethodOnNull
                  
                  

                  הכנסתי פרטי התחברות נכונים

                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • אוריי
                    אוריי נערך לאחרונה על ידי

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

                    shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • Aharon 0
                      Aharon 0 נערך לאחרונה על ידי

                      יש אפשרות להשתמש ב- FreeFileSync , מגיע עם רכיב שמאפשר להריץ אוטומטית כל כמה זמן.
                      אפשרות נוספת להריץ עם task scheduler של מערכת ההפעלה.

                      אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • אוריי
                        אוריי @Aharon 0 נערך לאחרונה על ידי

                        @aharon-0 , אני לא רוצה להריץ כל כמה זמן אני רוצה להריץ אותו כל פעם שמערכת אחרת נותנת לו פקודה לרוץ.. כך שאני רוצה שזה יהיה כמו קובץ מערכת שרץ כאשר אני קורא לו או משורת הפקודה או ע"י api או כל דרך אחרת

                        @shraga , הקוד עובד מעולה רק יש לי בעיה אחרת יש לי גישה לftp לקבצים ישירות ולא לתיקיה מעליהם (כלומר יש לי הרשאות גישה לקבצים הפנימיים
                        ואת זה הקוד שהבאת לי לא עושה השאלה היא האם תוכל לתת לי קוד שמוריד קובץ בסיומת csv ישירות מהFTP
                        תודה רבה מראש...

                        shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • shraga
                          shraga @אוריי נערך לאחרונה על ידי

                          @אוריי אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

                          ואת זה הקוד שהבאת לי לא עושה השאלה היא האם תוכל לתת לי קוד שמוריד קובץ בסיומת csv ישירות מהFTP

                          # Config
                          
                          $Username = "XXXX"
                          
                          $Password = "XXXX"
                          
                          $.LocalFile = "C:/testfolder/XXXXX/XXXX.csv"
                          
                          $RemoteFile = "ftp://XXXXX/Latest/XXXXX/XXXX.csv"
                          
                           
                          
                          # Create a FTPWebRequest
                          
                          $FTPRequest = [System.Net.FtpWebRequest]::Create($RemoteFile)
                          
                          $FTPRequest.Credentials = New-Object System.Net.NetworkCredential($Username,$Password)
                          
                          $FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
                          
                          $FTPRequest.UseBinary = $true
                          
                          $FTPRequest.KeepAlive = $false
                          
                          # Send the ftp request
                          
                          $FTPResponse = $FTPRequest.GetResponse()
                          
                          # Get a download stream from the server response
                          
                          $ResponseStream = $FTPResponse.GetResponseStream()
                          
                          # Create the target file on the local system and the download buffer
                          
                          $LocalFileFile = New-Object IO.FileStream ($LocalFile,[IO.FileMode]::Create)
                          
                          [byte[]]$ReadBuffer = New-Object byte[] 9213
                          
                          # Loop through the download
                          
                          do {
                          
                          $ReadLength = $ResponseStream.Read($ReadBuffer,0,9213)
                          
                          $LocalFileFile.Write($ReadBuffer,0,$ReadLength)
                          
                          }
                          
                          while ($ReadLength -ne 0)
                          
                          אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • shraga
                            shraga @אוריי נערך לאחרונה על ידי

                            @אוריי אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

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

                            לא ממש הבנתי, אם תוכל להרחיב.

                            אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 0
                            • אוריי
                              אוריי @shraga נערך לאחרונה על ידי אוריי

                              @shraga
                              כפי איך שהבנתי הכנסתי את הכתובת ip בשורה 9 לאחר ה \\ftp
                              תכלס הוא מחזיר לי שגיאה
                              עריכה: מצאתי את הבעיה בשורה 7 משום מה אצלך היה נקודה בתחילת השורה מה שגרם לו להחזיר שגיאה..

                              $.LocalFile = "C:/testfolder/XXXXX/XXXX.csv"
                              

                              מחקתי אותה וזה עובד מעולה

                              תגובה 1 תגובה אחרונה תגובה ציטוט 0
                              • אוריי
                                אוריי @shraga נערך לאחרונה על ידי אוריי

                                @shraga אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

                                @אוריי אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

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

                                לא ממש הבנתי, אם תוכל להרחיב.

                                יש לי מערכת שאני רוצה להריץ כמה שלבים אחד לאחר השני כאשר הראשון מסתיים
                                פחות או יותר סדר השלבים הוא קבלת הוראה מapi להתחיל לרוץ

                                1. בוט (או כל דבר אחר) שמוריד קבצים מהftp
                                2. לאחר מכן להריץ קובץ vbs שמריץ קוד vba על קובץ אחר
                                3. שליחת הוראה לapi שהסתיים
                                4. שליחת הקובץ פלט באימייל (נעשה ע"י סקריפט) לאחר כל הפעולות האלו..

                                עכשיו מה שאני רוצה לעשות זה קובץ בוט או כל דבר אחר שברגע שה api מפעיל אותו הוא יוריד קבצים חדשים מה ftp ולאחר מכן הוא יפעיל את הקובץ שמפעיל את ה vba וכו' וכו' ...
                                מה שאני צריך לעשות עם הקוד הזה שהוא יעבוד טוב בצורה סגורה ועם אפשרות שבעת שאני מפעיל אותו הוא מריץ את השלבים הבאים...

                                shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                • shraga
                                  shraga @אוריי נערך לאחרונה על ידי shraga

                                  @אוריי מה הוא הAPI שאמור להפעיל את התהליך בwindows??
                                  התממשקות בין מה למה?
                                  לא ברורה לי הנקודה הזו

                                  אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • אוריי
                                    אוריי @shraga נערך לאחרונה על ידי

                                    @shraga
                                    אני לא בונה את ה api
                                    זה פשוט מערכת של מישהו של שליחת קובץ במייל עם שילוב של עוד כמה מערכות והוא לוקח את הקובץ מהשרת שלי והוא בודק אם קיימים עדכונים ואם קיימים עדכונים הוא קורא לפוורשאל לעדכן את הקבצים ולאחר מכן הוא לוקח את הקובץ המעודכן ושולח אותו במייל...

                                    shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                    • shraga
                                      shraga @אוריי נערך לאחרונה על ידי

                                      @אוריי
                                      API =
                                      ?

                                      זה תוכנה כלשהי שיושבת על המחשב?

                                      אוריי 2 תגובות תגובה אחרונה תגובה ציטוט 0
                                      • אוריי
                                        אוריי @shraga נערך לאחרונה על ידי

                                        פוסט זה נמחק!
                                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                        • אוריי
                                          אוריי @shraga נערך לאחרונה על ידי אוריי

                                          @shraga
                                          אני ינסה שוב להסביר מה שאני צריך זה כך
                                          מערכת של עידכון קובץ לפי פרמטרים שהגדרתי ב vba ושזה יעבוד אוטומטי מתי שה api ישלח בקשה (כלומר יקרא לקובץ) ויתן בסיום ל api עידכון שהתהליך הסתיים..
                                          כל השאר איך לגשת לשרת ולקובץ שלי מה api זה לא מעניין אותי כרגע
                                          קודם כל שיהיה לי מערכת אוטומטית שעושה את השלבים האלו:

                                          1. בוט (או כל דבר אחר) שמוריד קבצים מהftp
                                          2. לאחר מכן להריץ קובץ vbs שמריץ קוד vba על קובץ אחר
                                          3. שליחת הוראה לapi שהסתיים

                                          אם חסרים לך עוד פרטים אוכל להשלים לך במייל שלי בחתימה

                                          shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                          • shraga
                                            shraga @אוריי נערך לאחרונה על ידי

                                            @אוריי אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

                                            בוט (או כל דבר אחר) שמוריד קבצים מהftp
                                            לאחר מכן להריץ קובץ vbs שמריץ קוד vba על קובץ אחר

                                            את השאר לא הבנתי :(, נמתין לקהל שאולי פחות קשה הבנה ממני...

                                            לגבי זה -

                                            1. זה אמור לעבוד במחשב ספציפי בלבד או במספר מחשבים?
                                            2. יצרת קובץ בסיומת .ps להורדת ועדכון הcsv? הוא עובד תקין?
                                            3. יש לך כבר את הקובץ vbs?
                                            אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                            • אוריי
                                              אוריי @shraga נערך לאחרונה על ידי

                                              @shraga אמר בהורדה אוטומטית של קבצי csv מאתר ftp:

                                              יצרת קובץ בסיומת .ps להורדת ועדכון הcsv? הוא עובד תקין?

                                              יצרתי והוא לא עובד תקין
                                              אבל כאשר אני מריץ בפוורשאל הוא עובד טוב
                                              מה זה יכול להיות?

                                              shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                              • shraga
                                                shraga @אוריי נערך לאחרונה על ידי

                                                @אוריי אולי בגלל שזה עובד רק בהרצה דרך 32 ביט,
                                                תיצור סקריפט נוסף שיריץ את הסקריפט במצב 32 ביט (תשנה את הנתיב C:\downloader.ps1 לנתיב הנכון של סקריפט ההורדה):

                                                $script = Start-Job -ScriptBlock {
                                                
                                                
                                                
                                                  powershell.exe -ExecutionPolicy RemoteSigned -file "C:\downloader.ps1"
                                                
                                                
                                                
                                                } -RunAs32
                                                

                                                עובד?

                                                אם כן, מה שנשאר זה לארוז את הכל לסקריפט אחד.

                                                אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                                • אוריי
                                                  אוריי @shraga נערך לאחרונה על ידי

                                                  @shraga
                                                  עדיין לא עובד... 😞

                                                  shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                  • shraga
                                                    shraga @אוריי נערך לאחרונה על ידי

                                                    פוסט זה נמחק!
                                                    אוריי תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                    • אוריי
                                                      אוריי @shraga נערך לאחרונה על ידי אוריי

                                                      פוסט זה נמחק!
                                                      shraga תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                      • shraga
                                                        shraga @אוריי נערך לאחרונה על ידי

                                                        פוסט זה נמחק!
                                                        תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                                        • הועבר מ תכנות ע"י  dovid dovid 
                                                        • 1 / 1
                                                        • פוסט ראשון
                                                          פוסט אחרון
                                                        בא תתחבר לדף היומי!