Exemple #1
0
        private void moveFileTest(FTPProtocol protocol)
        {
            bool   bError;
            string errorMsg   = "",
                   sourceFile = "",
                   targetFile,
                   remoteFolder = GetAppSetting("TargetFolder", "", protocol);

            // Create file(s) to upload
            sourceFile = Path.GetTempPath() + "\\MoveFile.test";
            db.LogTestFile(sourceFile);     // So the cleanup delete it

            using (StreamWriter sw = new StreamWriter(sourceFile)) {
                sw.WriteLine(LorumIpsum());
            }

            // Upload the file
            FTPService.FTPService ftpService = FTPService(protocol);
            targetFile = remoteFolder + "/" + sourceFile.FileName();

            bError = ftpService.UploadFile(sourceFile, targetFile, ref errorMsg);
            Assert.IsTrue(!bError, errorMsg);
            File.Delete(sourceFile);

            // Now download it to check that it got uploaded
            string temp = targetFile;

            targetFile = sourceFile;
            sourceFile = temp;

            List <string> downloadedFiles = new List <string>();

            bError = ftpService.DownloadFile(sourceFile, targetFile, downloadedFiles, ref errorMsg);
            LogTestFile(downloadedFiles);
            Assert.IsTrue(!bError, errorMsg);
            Assert.IsTrue(downloadedFiles.Count == 1, $"Error: {downloadedFiles.Count} file(s) were downloaded when 1 was expected");

            // Check that the file exists
            Assert.IsTrue(File.Exists(targetFile), $"Error: Failed to find file {targetFile}");

            // Now move it on the host
            targetFile = GetAppSetting("ArchiveFolder", "", protocol) + "/" + sourceFile.FileName();
            bError     = ftpService.MoveFile(sourceFile, targetFile, ref errorMsg, true);
            Assert.IsTrue(!bError, errorMsg);

            // Try to download it from original location (should fail because it has been moved)
            string tempFile = Path.GetTempFileName();

            db.LogTestFile(tempFile);     // So the cleanup delete it

            bError = ftpService.DownloadFile(sourceFile, tempFile, downloadedFiles, ref errorMsg);
            Assert.IsTrue(bError, "Error: Download should have failed because the source file has been moved. This error means that the move failed");

            // Now try to download it from the archive location
            bError = ftpService.DownloadFile(targetFile, tempFile, downloadedFiles, ref errorMsg);
            Assert.IsTrue(!bError, errorMsg);

            // Now delete it in the archive
            bError = ftpService.DeleteFile(targetFile, ref errorMsg);
            Assert.IsTrue(!bError, errorMsg);

            // Finally, try to download the archived file again (should fail)
            bError = ftpService.DownloadFile(targetFile, tempFile, downloadedFiles, ref errorMsg);
            Assert.IsTrue(bError, "Error: Download should have failed because the previous delete should have removed the file. This error means that the delete failed");
        }
        private void receiveFiles(FileTransferConfigurationModel config)
        {
            int numFiles   = 0,
                numSuccess = 0,
                numErrors  = 0;

            WriteTaskLog($"Receiving file(s) from '{config.SourceFolder}' to '{config.TargetFolder}'");

            // Start the FTP service
            var ftpService = new FTPService.FTPService(config.FTPHost, config.UserId, config.Password, config.Protocol);

            // Get a list of files on the remote folder to receive
            string        errorMsg = "";
            List <string> fileList = new List <string>();

            if (ftpService.GetFTPFileList(config.SourceFolder, ref fileList, ref errorMsg))
            {
                WriteTaskLog(errorMsg, LogSeverity.Severe);
            }
            else
            {
                if (fileList != null)
                {
                    numFiles = fileList.Count();

                    string targetFolder = config.TargetFolder;
                    FileManagerService.FileManagerService.CreateFolder(targetFolder);

                    foreach (var fileName in fileList)
                    {
                        // Receiving a file
                        string targetFile = targetFolder + "\\" + fileName.FileName();

                        WriteTaskLog($"Receiving '{fileName}' to '{targetFile}'");

                        if (ftpService.DownloadFile(fileName,
                                                    targetFile,
                                                    null,
                                                    ref errorMsg))
                        {
                            // Failed to perform transfer
                            WriteTaskLog(errorMsg, LogSeverity.Severe);
                            numErrors++;

                            // Upon error, delete or archive remote file
                            bool bError;
                            if (!string.IsNullOrEmpty(config.ErrorFolder))
                            {
                                // File is configured to be archived
                                bError = ftpService.MoveFile(fileName, config.ErrorFolder, ref errorMsg);
                            }
                            else
                            {
                                // No archive configuration, so just delete the file
                                bError = ftpService.DeleteFile(fileName, ref errorMsg);
                            }
                            if (bError)
                            {
                                WriteTaskLog(errorMsg, LogSeverity.Severe);
                            }

                            // Delete the local file so we don't double-up
                            FileManagerService.FileManagerService.DeleteFile(targetFile);
                        }
                        else
                        {
                            // Transfer successful
                            WriteTaskLog(errorMsg, LogSeverity.Normal);
                            numSuccess++;

                            // Upon successful receipt, delete or archive remote file
                            bool bError;
                            if (!string.IsNullOrEmpty(config.ArchiveFolder))
                            {
                                // File is configured to be archived
                                bError = ftpService.MoveFile(fileName, config.ArchiveFolder, ref errorMsg);
                            }
                            else
                            {
                                // No archive configuration, so just delete the file
                                bError = ftpService.DeleteFile(fileName, ref errorMsg);
                            }
                            if (bError)
                            {
                                WriteTaskLog(errorMsg, LogSeverity.Severe);
                            }
                        }
                    }
                }
            }

            WriteTaskLog($"{numFiles} found, {numSuccess} received successfully, {numErrors} error(s)");
        }