public override async Task <DexihFiles> GetFileEnumerator(FlatFile file, EFlatFilePath path, string searchPattern) { try { var files = new List <DexihFileProperties>(); using (var client = await GetFtpClient()) { var fullDirectory = GetFullPath(file, path); var directoryListing = await client.GetListingAsync(fullDirectory); foreach (var directoryItem in directoryListing) { if (directoryItem.Type == FtpFileSystemObjectType.File && (string.IsNullOrEmpty(searchPattern) || FitsMask(directoryItem.Name, searchPattern))) { files.Add(new DexihFileProperties() { FileName = directoryItem.Name, LastModified = directoryItem.Modified, Length = directoryItem.Size }); } } var newFiles = new DexihFiles(files.ToArray()); return(newFiles); } } catch (Exception ex) { throw new ConnectionException($"Error occurred getting files from {path} with pattern {searchPattern}. {ex.Message}", ex); } }
public override async Task <bool> CreateDirectory(FlatFile file, EFlatFilePath path) { try { var directory = await GetDatabaseDirectory(); var cloudFileDirectory = directory; if (file != null && !string.IsNullOrEmpty(file.FileRootPath)) { cloudFileDirectory = directory.GetDirectoryReference(file.FileRootPath); await cloudFileDirectory.Container.CreateIfNotExistsAsync(); } if (file != null && path != EFlatFilePath.None) { cloudFileDirectory = cloudFileDirectory.GetDirectoryReference(file.GetPath(path)); await cloudFileDirectory.Container.CreateIfNotExistsAsync(); } return(true); } catch (Exception ex) { throw new ConnectionException($"Failed to create the directory for file {file.Name} path {path}. {ex.Message}", ex); } }
public override async Task <bool> MoveFile(FlatFile file, EFlatFilePath fromDirectory, EFlatFilePath toDirectory, string fileName) { try { var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); var version = 0; string newFileName; var cloudFileDirectory = await GetFileDirectory(file); var cloudFromDirectory = cloudFileDirectory.GetDirectoryReference(file.GetPath(fromDirectory)); var cloudToDirectory = cloudFileDirectory.GetDirectoryReference(file.GetPath(toDirectory)); CloudBlob sourceFile = cloudFromDirectory.GetBlockBlobReference(fileName); CloudBlob targetFile = cloudToDirectory.GetBlockBlobReference(fileName); while (await targetFile.ExistsAsync()) { version++; newFileName = fileNameWithoutExtension + "_" + version.ToString() + fileNameExtension; targetFile = cloudToDirectory.GetBlockBlobReference(newFileName); } await targetFile.StartCopyAsync(sourceFile.Uri); await sourceFile.DeleteAsync(); return(true); } catch (Exception ex) { throw new ConnectionException($"Failed to move file {file.Name} filename {Filename} from {fromDirectory} to {toDirectory}. {ex.Message}", ex); } }
public override async Task <bool> SaveFileStream(FlatFile file, EFlatFilePath path, string fileName, Stream fileStream) { try { var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); var version = 0; string newFileName; var cloudFileDirectory = await GetFileDirectory(file); var cloudSubDirectory = cloudFileDirectory.GetDirectoryReference(file.GetPath(path)); var cloudFile = cloudSubDirectory.GetBlockBlobReference(fileName); while (await cloudFile.ExistsAsync()) { version++; newFileName = fileNameWithoutExtension + "_" + version.ToString() + fileNameExtension; cloudFile = cloudSubDirectory.GetBlockBlobReference(newFileName); } await cloudFile.UploadFromStreamAsync(fileStream); fileStream.Dispose(); return(true); } catch (Exception ex) { throw new ConnectionException($"Failed save the file {file.Name} name {Filename} in path {path}. {ex.Message}", ex); } }
private Task <string> FixFileName(FlatFile file, EFlatFilePath path, string fileName) { var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); var version = 0; var fullPath = GetFullPath(file, path); var newFileName = fileName; using (var client = GetSftpClient()) { while (client.Exists(CombinePath(fullPath, newFileName))) { version++; newFileName = fileNameWithoutExtension + "_" + version.ToString() + fileNameExtension; } var filePath = CombinePath(fullPath, newFileName); return(Task.FromResult(filePath)); } }
public override Task <DexihFiles> GetFileEnumerator(FlatFile file, EFlatFilePath path, string searchPattern) { try { var files = new List <DexihFileProperties>(); var fullDirectory = GetFullPath(file, path); var filenames = string.IsNullOrEmpty(searchPattern) ? Directory.GetFiles(fullDirectory) : Directory.GetFiles(fullDirectory, searchPattern); foreach (var fileName in filenames) { var fileInfo = new FileInfo(fileName); files.Add(new DexihFileProperties() { FileName = fileInfo.Name, LastModified = fileInfo.LastWriteTime, Length = fileInfo.Length }); } var newFiles = new DexihFiles(files.ToArray()); return(Task.FromResult(newFiles)); } catch (Exception ex) { throw new ConnectionException($"Error occurred getting files from {path} with pattern {searchPattern}. {ex.Message}", ex); } }
public override Task <DexihFiles> GetFileEnumerator(FlatFile file, EFlatFilePath path, string searchPattern) { try { var files = new List <DexihFileProperties>(); using (var client = GetSftpClient()) { var fullDirectory = GetFullPath(file, path); var directoryListing = client.ListDirectory(fullDirectory); foreach (var directoryItem in directoryListing) { if (directoryItem.IsRegularFile && (string.IsNullOrEmpty(searchPattern) || FitsMask(directoryItem.Name, searchPattern))) { files.Add(new DexihFileProperties() { FileName = directoryItem.Name, LastModified = directoryItem.LastWriteTime, Length = directoryItem.Length }); } } var newFiles = new DexihFiles(files.ToArray()); return(Task.FromResult(newFiles)); } } catch (Exception ex) { throw new ConnectionException($"Error occurred getting files from {path} with pattern {searchPattern}. {ex.Message}", ex); } }
private async Task <string> FixFileName(FlatFile file, EFlatFilePath path, string fileName) { var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); var version = 0; var fullPath = GetFullPath(file, path); var newFileName = fileName; using (var client = await GetFtpClient()) { while (await client.FileExistsAsync(CombinePath(fullPath, newFileName))) { version++; newFileName = fileNameWithoutExtension + "_" + version.ToString() + fileNameExtension; } var filePath = CombinePath(fullPath, newFileName); return(filePath); } }
public override Task <bool> CreateDirectory(FlatFile file, EFlatFilePath path) { try { var directory = FilePath(); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } if (file != null && !string.IsNullOrEmpty(file.FileRootPath)) { directory = Path.Combine(FilePath(), file.FileRootPath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } } if (file != null && path != EFlatFilePath.None) { directory = Path.Combine(directory, file.GetPath(path)); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } } return(Task.FromResult(true)); } catch (Exception ex) { throw new ConnectionException($"Error occurred creating directory {path}. {ex.Message}", ex); } }
public override async Task <bool> MoveFile(FlatFile file, EFlatFilePath fromDirectory, EFlatFilePath toDirectory, string fileName) { try { var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); var version = 0; var newFileName = fileName; var fullToDirectory = GetFullPath(file, toDirectory); var fullFromDirectory = GetFullPath(file, fromDirectory); var createDirectoryResult = await CreateDirectory(file, toDirectory); if (!createDirectoryResult) { return(false); } // if there is already a file with the same name on the target directory, add a version number until a unique name is found. while (File.Exists(Path.Combine(fullToDirectory, newFileName))) { version++; newFileName = fileNameWithoutExtension + "_" + version.ToString() + fileNameExtension; } File.Move(Path.Combine(fullFromDirectory, fileName), Path.Combine(fullToDirectory, newFileName)); return(true); } catch (Exception ex) { throw new ConnectionException($"Error occurred moving file {file.Name} from {fromDirectory} to {toDirectory}. {ex.Message}", ex); } }
public override string GetFullPath(FlatFile file, EFlatFilePath path) { var fullPath = Path.Combine(FilePath(), file.FileRootPath ?? "", file.GetPath(path)); ValidatePath(fullPath); return(fullPath); }
public override Task <bool> DeleteFile(FlatFile file, EFlatFilePath path, string fileName) { try { var fullDirectory = GetFullPath(file, path); File.Delete(Path.Combine(fullDirectory, fileName)); return(Task.FromResult(true)); } catch (Exception ex) { throw new ConnectionException($"Error occurred deleting file {file} at {path}. {ex.Message}", ex); } }
public override Task <Stream> GetReadFileStream(FlatFile file, EFlatFilePath path, string fileName) { try { var fullDirectory = GetFullPath(file, path); Stream reader = File.OpenRead(Path.Combine(fullDirectory, fileName)); return(Task.FromResult(reader)); } catch (Exception ex) { throw new ConnectionException($"Error occurred reading file {fileName} at {path}. {ex.Message}", ex); } }
public DownloadFilesTask(ISharedSettings sharedSettings, string messageId, long hubKey, ConnectionFlatFile connectionFlatFile, FlatFile flatFile, EFlatFilePath path, string[] files, DownloadUrl downloadUrl, string connectionId, string reference) { _sharedSettings = sharedSettings; _messageId = messageId; _hubKey = hubKey; _connectionFlatFile = connectionFlatFile; _flatFile = flatFile; _path = path; _files = files; _downloadUrl = downloadUrl; _connectionId = connectionId; _reference = reference; }
public override Task <Stream> GetReadFileStream(FlatFile file, EFlatFilePath path, string fileName) { try { var fullDirectory = GetFullPath(file, path); var client = GetSftpClient(); var reader = client.OpenRead(CombinePath(fullDirectory, fileName)); // var ftpStream = new SftpStream(reader, client); return(Task.FromResult <Stream>(reader)); } catch (Exception ex) { throw new ConnectionException($"Error occurred reading file {fileName} at {path}. {ex.Message}", ex); } }
public override async Task <Stream> GetWriteFileStream(FlatFile file, EFlatFilePath path, string fileName) { try { var createDirectoryResult = await CreateDirectory(file, path); var fullDirectory = GetFullPath(file, path); Stream reader = File.OpenWrite(Path.Combine(fullDirectory, fileName)); return(reader); } catch (Exception ex) { throw new ConnectionException($"Error occurred writing file {fileName} at {path}. {ex.Message}", ex); } }
public override async Task <Stream> GetWriteFileStream(FlatFile file, EFlatFilePath path, string fileName) { try { var cloudFileDirectory = await GetFileDirectory(file); var cloudSubDirectory = cloudFileDirectory.GetDirectoryReference(file.GetPath(path)); Stream stream = await cloudSubDirectory.GetBlockBlobReference(fileName).OpenWriteAsync(); return(stream); } catch (Exception ex) { throw new ConnectionException($"Failed write the file {file.Name} name {Filename} in path {path}. {ex.Message}", ex); } }
public override async Task <Stream> GetWriteFileStream(FlatFile file, EFlatFilePath path, string fileName) { try { await CreateDirectory(file, path); var client = GetSftpClient(); var fullDirectory = GetFullPath(file, path); var stream = client.OpenWrite(fullDirectory + "/" + fileName); // var ftpStream = new SftpStream(stream, client); return(stream); } catch (Exception ex) { throw new ConnectionException($"Error occurred writing file {fileName} at {path}. {ex.Message}", ex); } }
public override async Task <Stream> GetReadFileStream(FlatFile file, EFlatFilePath path, string fileName) { try { var fullDirectory = GetFullPath(file, path); var client = await GetFtpClient(); var reader = await client.OpenReadAsync(CombinePath(fullDirectory, fileName), FtpDataType.ASCII); var ftpStream = new FtpStream(reader, client); return(ftpStream); } catch (Exception ex) { throw new ConnectionException($"Error occurred reading file {fileName} at {path}. {ex.Message}", ex); } }
public override async Task <bool> DeleteFile(FlatFile file, EFlatFilePath path, string fileName) { try { var cloudFileDirectory = await GetFileDirectory(file); var cloudSubDirectory = cloudFileDirectory.GetDirectoryReference(file.GetPath(path)); CloudBlob cloudFile = cloudSubDirectory.GetBlockBlobReference(fileName); await cloudFile.DeleteAsync(); return(true); } catch (Exception ex) { throw new ConnectionException($"Failed to delete file {file.Name} filename {Filename} from {path}. {ex.Message}", ex); } }
public override async Task <bool> DeleteFile(FlatFile file, EFlatFilePath path, string fileName) { try { using (var client = await GetFtpClient()) { var fullDirectory = GetFullPath(file, path); await client.DeleteFileAsync(CombinePath(fullDirectory, fileName)); return(true); } } catch (Exception ex) { throw new ConnectionException($"Error occurred deleting file {file} at {path}. {ex.Message}", ex); } }
public override string GetFullPath(FlatFile file, EFlatFilePath path) { var fullPath = _workingDirectory + "/" + DefaultDatabase; if (!string.IsNullOrEmpty(file.FileRootPath)) { fullPath += "/" + file.FileRootPath; } var subPath = file.GetPath(path); if (!string.IsNullOrEmpty(subPath)) { fullPath += "/" + subPath; } return(fullPath); }
public override async Task <DexihFiles> GetFileEnumerator(FlatFile file, EFlatFilePath path, string searchPattern) { try { var files = new List <DexihFileProperties>(); var cloudFileDirectory = await GetFileDirectory(file); var pathstring = file.GetPath(path); var pathlength = pathstring.Length + 1; var cloudSubDirectory = cloudFileDirectory.GetDirectoryReference(pathstring); BlobContinuationToken continuationToken = null; var list = new List <IListBlobItem>(); do { var filesList = await cloudSubDirectory.ListBlobsSegmentedAsync(false, BlobListingDetails.None, 500, continuationToken, null, null); continuationToken = filesList.ContinuationToken; list.AddRange(filesList.Results); } while (continuationToken != null); foreach (CloudBlob cloudFile in list) { await cloudFile.FetchAttributesAsync(); var fileName = cloudFile.Name.Substring(pathlength); if (string.IsNullOrEmpty(searchPattern) || FitsMask(file.Name, searchPattern)) { files.Add(new DexihFileProperties() { FileName = fileName, LastModified = cloudFile.Properties.LastModified.Value.DateTime, Length = cloudFile.Properties.Length }); } } var newFiles = new DexihFiles(files.ToArray()); return(newFiles); } catch (Exception ex) { throw new ConnectionException($"Failed get file {file.Name} files in path {path} with pattern {searchPattern}. {ex.Message}", ex); } }
public override async Task <bool> SaveFileStream(FlatFile file, EFlatFilePath path, string fileName, Stream stream) { try { var createDirectoryResult = await CreateDirectory(file, path); var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); if (fileNameExtension == ".zip") { using (var archive = new ZipArchive(stream, ZipArchiveMode.Read)) { foreach (var entry in archive.Entries) { var filePath = FixFileName(file, path, entry.Name); entry.ExtractToFile(filePath); } } return(true); } else { var filePath = FixFileName(file, path, fileName); var newFile = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write); //stream.Seek(0, SeekOrigin.Begin); await stream.CopyToAsync(newFile); await stream.FlushAsync(); newFile.Dispose(); return(true); } } catch (Exception ex) { throw new ConnectionException($"Error occurred saving file stream of file {fileName} at {path}. {ex.Message}", ex); } }
private string FixFileName(FlatFile file, EFlatFilePath path, string fileName) { var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var fileNameExtension = Path.GetExtension(fileName); var version = 0; var fullPath = GetFullPath(file, path); var newFileName = fileName; while (File.Exists(Path.Combine(fullPath, newFileName))) { version++; newFileName = fileNameWithoutExtension + "_" + version.ToString() + fileNameExtension; } var filePath = Path.Combine(fullPath, newFileName); return(filePath); }
public override Task <bool> CreateDirectory(FlatFile file, EFlatFilePath path) { try { using (var client = GetSftpClient()) { var directory = DefaultDatabase; if (!client.Exists(directory)) { client.CreateDirectory(directory); } if (file != null && !string.IsNullOrEmpty(file.FileRootPath)) { directory = CombinePath(DefaultDatabase, file.FileRootPath); if (!client.Exists(directory)) { client.CreateDirectory(directory); } } if (file != null && path != EFlatFilePath.None) { directory = CombinePath(directory, file.GetPath(path)); if (!client.Exists(directory)) { client.CreateDirectory(directory); } } return(Task.FromResult(true)); } } catch (Exception ex) { throw new ConnectionException($"Error occurred creating directory {path}. {ex.Message}", ex); } }
public override async Task <bool> SaveFileStream(FlatFile file, EFlatFilePath path, string fileName, Stream stream) { try { await CreateDirectory(file, path); var filePath = await FixFileName(file, path, fileName); using (var client = GetSftpClient()) { var newFile = client.OpenWrite(filePath); await stream.CopyToAsync(newFile); await stream.FlushAsync(); return(true); } } catch (Exception ex) { throw new ConnectionException($"Error occurred saving file stream of file {fileName} at {path}. {ex.Message}", ex); } }
public async Task <Stream> DownloadFiles(FlatFile flatFile, EFlatFilePath path, string[] fileNames, bool zipFiles = false) { if (zipFiles) { var memoryStream = new MemoryStream(); using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Update, true)) { foreach (var fileName in fileNames) { var fileStreamResult = await GetReadFileStream(flatFile, path, fileName); var fileEntry = archive.CreateEntry(fileName); using (var fileEntryStream = fileEntry.Open()) { fileStreamResult.CopyTo(fileEntryStream); } } } memoryStream.Seek(0, SeekOrigin.Begin); return(memoryStream); } else { if (fileNames.Length == 1) { return(await GetReadFileStream(flatFile, path, fileNames[0])); } else { throw new ConnectionException("When downloading more than one file, the zip option must be set."); } } }
public override Task <List <DexihFileProperties> > GetFileList(FlatFile file, EFlatFilePath path) { try { var files = new List <DexihFileProperties>(); var fullDirectory = GetFullPath(file, path); foreach (var fileName in Directory.GetFiles(fullDirectory)) { var fileInfo = new FileInfo(fileName); var contentType = ""; //MimeMapping.GetMimeMapping(FilePath + Path.DirectorySeparatorChar+ MainDirectory + Path.DirectorySeparatorChar+ SubDirectory + Path.DirectorySeparatorChar+ File); //TODO add MimeMapping files.Add(new DexihFileProperties() { FileName = fileInfo.Name, LastModified = fileInfo.LastWriteTime, Length = fileInfo.Length, ContentType = contentType }); } return(Task.FromResult(files)); } catch (Exception ex) { throw new ConnectionException($"Error occurred getting filelist {path}. {ex.Message}", ex); } }
public override async Task <List <DexihFileProperties> > GetFileList(FlatFile file, EFlatFilePath path) { try { var files = new List <DexihFileProperties>(); var cloudFileDirectory = await GetFileDirectory(file); var pathstring = file.GetPath(path); var pathlength = pathstring.Length + 1; var cloudSubDirectory = cloudFileDirectory.GetDirectoryReference(pathstring); BlobContinuationToken continuationToken = null; var list = new List <IListBlobItem>(); do { var filesList = await cloudSubDirectory.ListBlobsSegmentedAsync(true, BlobListingDetails.None, 500, continuationToken, null, null); continuationToken = filesList.ContinuationToken; list.AddRange(filesList.Results); } while (continuationToken != null); foreach (CloudBlob cloudFile in list) { await cloudFile.FetchAttributesAsync(); var fileName = cloudFile.Name.Substring(pathlength); files.Add(new DexihFileProperties() { FileName = fileName, LastModified = cloudFile.Properties.LastModified.Value.DateTime, Length = cloudFile.Properties.Length, ContentType = cloudFile.Properties.ContentType }); } return(files); } catch (Exception ex) { throw new ConnectionException($"Failed get filelist {file.Name} files in path {path}. {ex.Message}", ex); } }