internal S3FileStream(AmazonS3 s3Client, string bucket, string key, FileMode mode, FileAccess access, int buffersize)
{
file = new S3FileInfo(s3Client, bucket, key);
buffer = new MemoryStream(buffersize);
this.mode = mode;
this.access = access;
fileExist = file.ExistsWithBucketCheck(out bucketExist);
if ((access & FileAccess.Read) != FileAccess.Read)
{
canRead = false;
}
if ((access & FileAccess.Write) != FileAccess.Write)
{
canWrite = false;
}
switch (mode)
{
case FileMode.Append:
if ((access & FileAccess.Write) != FileAccess.Write)
{
throw new ArgumentException("Append requires Write access");
}
PopulateData();
buffer.Seek(0, SeekOrigin.End);
startPosition = buffer.Position;
break;
case FileMode.Create:
if ((access & FileAccess.Write) != FileAccess.Write)
{
throw new ArgumentException("Create requires Write access");
}
break;
case FileMode.CreateNew:
if (fileExist)
{
throw new IOException("CreateNew requires the file not to already exist");
}
if ((access & FileAccess.Write) != FileAccess.Write)
{
throw new ArgumentException("Create requires Write access");
}
break;
case FileMode.Open:
if (!fileExist)
{
throw new IOException("Open requires the file to already exist");
}
PopulateData();
break;
case FileMode.OpenOrCreate:
if (fileExist)
{
if ((access & FileAccess.Write) != FileAccess.Write)
{
throw new ArgumentException("Create requires Write access");
}
}
break;
case FileMode.Truncate:
if (!fileExist)
{
throw new IOException("Truncate requires the file to already exist");
}
if ((access & FileAccess.Write) != FileAccess.Write)
{
throw new ArgumentException("Truncate requires Write access");
}
break;
default:
throw new ArgumentException("Invalid value", "mode");
}
}