この質問の背景は、私が開発している仮想ファイルシステムに基づいています。私が使用しているコンセプトは、さまざまなタイプのストレージタイプ、つまりローカルファイルシステム、ドロップボックス、およびamazon s3のvirutalパスプロバイダです。仮想ファイルの基本クラスは次のようになります。仮想パスプロバイダとAmazon S3 SDKを使用してファイルをアップロード
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を使用してこの問題を解決することができるということですし、どのようにすべき私は私のamazon s3仮想パスプロバイダで自分のOpen(FileMode fileMode)メソッドを実装していますか?
[SDK](http://aws.amazon.com/sdkfornet/)を使用する必要があります。 –
@AaronMcIver申し訳ありませんが、私の質問はあいまいでした..詳細を追加しました – Marcus
さまざまなクラウドストレージプロバイダSDKの実装に対応するインターフェイス/工場設計を行うことが必要です。 [David EbboのMicrosoft Patents](http://www.google.com/patents/US20060206452) - あなたの試みがかなりクールな技術開発のように聞こえるかどうかなど、それらの特許を侵害していないことを確認してください。がんばろう!! –