この質問の背景は、私が開発している仮想ファイルシステムに基づいています。私が使用しているコンセプトは、さまざまなタイプのストレージタイプ、つまりローカルファイルシステム、ドロップボックス、Amazons3用の仮想パスプロバイダーです。仮想ファイルの基本クラスは次のようになります。
public abstract class CommonVirtualFile : VirtualFile {
public virtual string Url {
get { throw new NotImplementedException(); }
}
public virtual string LocalPath {
get { throw new NotImplementedException(); }
}
public override Stream Open() {
throw new NotImplementedException();
}
public virtual Stream Open(FileMode fileMode) {
throw new NotImplementedException();
}
protected CommonVirtualFile(string virtualPath) : base(virtualPath) { }
}
2番目のOpenメソッドの実装は、私の質問のすべてです。ローカルファイルシステムの実装を見ると、つまりファイルをディスクに保存すると、次のようになります。
public override Stream Open(FileMode fileMode) {
return new FileStream("The_Path_To_The_File_On_Disk"), fileMode);
}
ローカルファイルシステムにファイルを保存したい場合、これは次のようになります。
const string virtualPath = "/assets/newFile.txt";
var file = HostingEnvironment.VirtualPathProvider.GetFile(virtualPath) as CommonVirtualFile;
if (file == null) {
var virtualDir = VirtualPathUtility.GetDirectory(virtualPath);
var directory = HostingEnvironment.VirtualPathProvider.GetDirectory(virtualDir) as CommonVirtualDirectory;
file = directory.CreateFile(VirtualPathUtility.GetFileName(virtualPath));
}
byte[] fileContent;
using (var fileStream = new FileStream(@"c:\temp\fileToCopy.txt", FileMode.Open, FileAccess.Read)) {
fileContent = new byte[fileStream.Length];
fileStream.Read(fileContent, 0, fileContent.Length);
}
// write the content to the local file system
using (Stream stream = file.Open(FileMode.Create)) {
stream.Write(fileContent, 0, fileContent.Length);
}
私が欲しいのは、Amazon s3仮想パスプロバイダーに切り替えた場合、このコードを変更せずに直接機能させたいので、要約すると、Amazon s3 sdkを使用してこれを解決するにはどうすればよいですか、Open(FileMode fileMode)私のamazon s3仮想パスプロバイダーのメソッド?