コード例 #1
0
        public CreateStreamResult CreateStream(string name, StreamAccess access, StreamShare share, int bufferSize)
        {
            var filePath = Path.Combine(SystemPath, name);
            var fs       = OpenStream(filePath, FileMode.Create, access, share, bufferSize);
            var ret      = new CreateStreamResult()
            {
                EntryBase = StorageProviderEntryFromPath(filePath),
                Stream    = fs
            };

            return(ret);
        }
コード例 #2
0
        public Stream OpenStream(Uri uri, StreamMode mode, StreamAccess access, StreamShare share, int bufferSize)
        {
            var fmode = FileMode.Append;

            switch (mode)
            {
            case StreamMode.Append: fmode = FileMode.Append; break;

            case StreamMode.Open: fmode = FileMode.Open; break;

            case StreamMode.Truncate: fmode = FileMode.Truncate; break;
            }

            var filePath = PathFromUri(uri);

            return(OpenStream(filePath, fmode, access, share, bufferSize));
        }
コード例 #3
0
        public Stream OpenStream(Uri uri, StreamMode mode, StreamAccess access, StreamShare share, int bufferSize)
        {
            if (uri is null)
            {
                throw new ArgumentNullException(nameof(uri));
            }

            if (mode != StreamMode.Open)
            {
                throw new NotSupportedException($"ZipStorgeProvider does not support mode: {mode}");
            }

            lock (_zipArchive)
            {
                var path   = PathFromUri(uri);
                var stream = _zipArchive.GetEntry(path).Open();
                return(stream);
            }
        }
コード例 #4
0
        public CreateStreamResult CreateStream(string name, StreamAccess access, StreamShare share, int bufferSize = 0)
        {
            var resolver   = Context.ContentResolver;
            var androidUri = DocumentsContract.CreateDocument(resolver, AndroidUri, null, name);
            var fs         = OpenStream(androidUri, StreamMode.Open, access, share, bufferSize);
            var ret        = new CreateStreamResult()
            {
                Stream    = fs,
                EntryBase = new StorageEntryBase
                {
                    Name          = name,
                    LastWriteTime = DateTime.Now,
                    Size          = 0,
                    IsStorage     = false,
                    Uri           = AndroidUriToUri(androidUri)
                }
            };

            return(ret);
        }
コード例 #5
0
        private Stream OpenStream(string filePath, FileMode fmode, StreamAccess access, StreamShare share, int _)
        {
            var faccess = FileAccess.Read;

            switch (access)
            {
            case StreamAccess.Read: faccess = FileAccess.Read; break;

            case StreamAccess.ReadWrite: faccess = FileAccess.ReadWrite; break;

            case StreamAccess.Write: faccess = FileAccess.Write; break;
            }

            FileShare fshare = FileShare.None;

            switch (share)
            {
            case StreamShare.None: fshare = FileShare.None; break;

            case StreamShare.Read: fshare = FileShare.Read; break;

            case StreamShare.ReadWrite: fshare = FileShare.ReadWrite; break;

            case StreamShare.Write: fshare = FileShare.Write; break;
            }

            return(File.Open(filePath, fmode, faccess, fshare));
        }
コード例 #6
0
        private Stream OpenStream(Android.Net.Uri androidUri, StreamMode mode, StreamAccess access, StreamShare _, int bufferSize = 0)
        {
            if (access == StreamAccess.ReadWrite)
            {
                throw new ArgumentException("StreamMode.ReadWrite does not support!");
            }


            var    resolver   = Context.ContentResolver;
            string streamMode = "";

            if (bufferSize == 0)
            {
                bufferSize = 4096;
            }

            switch (mode)
            {
            case StreamMode.Append:
                if (access == StreamAccess.Read)
                {
                    throw new ArgumentException("StreamMode.Append only support StreamAccess.write access.");
                }
                if (access == StreamAccess.Write)
                {
                    streamMode = "wa";
                }
                if (access == StreamAccess.ReadWrite)
                {
                    throw new ArgumentException("StreamMode.Append only support StreamAccess.write access.");
                }
                break;

            case StreamMode.Open:
                if (access == StreamAccess.Read)
                {
                    streamMode = "r";
                }
                if (access == StreamAccess.Write)
                {
                    streamMode = "rw";                                   //rw instead w; because w does not support seek
                }
                break;

            case StreamMode.Truncate:
                if (access == StreamAccess.Read)
                {
                    throw new ArgumentException("StreamMode.Truncate does not support StreamAccess.read access.");
                }
                if (access == StreamAccess.ReadWrite)
                {
                    throw new ArgumentException("StreamMode.Truncate does not support StreamAccess.readWrite access.");
                }
                if (access == StreamAccess.Write)
                {
                    streamMode = "rwt";
                }
                break;
            }


            var parcelFD = resolver.OpenFileDescriptor(androidUri, streamMode);
            var stream   = new ChannelStream(parcelFD, streamMode);
            var ret      = (Stream) new BufferedStream(stream, bufferSize);

            return(ret);
        }
コード例 #7
0
 public Stream OpenStream(Uri uri, StreamMode mode, StreamAccess access, StreamShare share, int bufferSize = 0)
 {
     return(OpenStream(AndroidUriFromChildNetUri(uri), mode, access, share, bufferSize));
 }
コード例 #8
0
 public CreateStreamResult CreateStream(string name, StreamAccess access, StreamShare share, int bufferSize) => throw new NotSupportedException();