【发布时间】:2018-01-20 02:22:18
【问题描述】:
我希望从这样的目录结构中读取文件夹和文件.. 例如
C:\RootFolder
SubFolder1
SubFolder2
File1
File2
SubFolder3
File3
Files....
Files....
我想同时读取文件和文件夹并写入另一个我不能使用 copy 的目录,因为我要写入的目录是远程的而不是本地的。
我在这里阅读了文件....我希望能够读取文件夹和文件并将两者都写入另一个目录。
public static IEnumerable<FileInfo> GetFiles(string dir)
{
return Directory.EnumerateFiles(dir, "*", SearchOption.AllDirectories)
.Select(path =>
{
var stream = File.OpenRead(path);
return new FileInfo(Path.GetFileName(path), stream);
})
.DisposeEach(c => c.Content);
}
此函数将文件写入远程 sftp 站点。
public Task Write(IEnumerable<FileInfo> files)
{
return Task.Run(() =>
{
using (var sftp = new SftpClient(this.sshInfo))
{
sftp.Connect();
sftp.ChangeDirectory(this.remoteDirectory);
foreach (var file in files)
{
sftp.UploadFile(file.Content, file.RelativePath);
}
}
});
}
在这个函数中,我从上面的函数中写入读取的文件。
private async static Task SendBatch(Config config, Batch batch, IRemoteFileWriter writer)
{
var sendingDir = GetClientSendingDirectory(config, batch.ClientName);
Directory.CreateDirectory(Path.GetDirectoryName(sendingDir));
Directory.Move(batch.LocalDirectory, sendingDir);
Directory.CreateDirectory(batch.LocalDirectory);
//Use RemoteFileWriter...
var files = GetFiles(sendingDir);
await writer.Write(files).ContinueWith(t =>
{
if(t.IsCompleted)
{
var zipArchivePath = GetArchiveDirectory(config, batch);
ZipFile.CreateFromDirectory(
sendingDir,
zipArchivePath + " " +
DateTime.Now.ToString("yyyy-MM-dd hh mm ss.Zip")
);
}
});
}
谢谢!
【问题讨论】:
-
为什么有人会拒绝这个问题?这不是一个合法的问题还是这个问题有什么问题......我想知道以供将来参考。谢谢
-
英语不是您的主要语言吗?你的措辞很尴尬。 “在我成功读取文件后,除非我特别选择,否则我无法做到”什么?
-
我的意思是,你的英语很难懂。我怀疑这就是你被否决的原因。我会尝试澄清我引用的那句话。
-
我认为后面解释的句子选择“读取没有文件夹的文件或仅当我结合我得到“未经授权的异常”时才从文件夹中读取这是否解释了我的选择......?
-
你的编辑好多了。
标签: c# filestream