Пример #1
0
        /// <summary>Translate file open flags from System.IO into pCloud's Linux-friendly variant.</summary>
        static eFileOpenFlags openFlags(FileMode mode, FileAccess access)
        {
            if (access == FileAccess.Read)
            {
                if (mode != FileMode.Open)
                {
                    throw new ArgumentException("File mode incompatible with Read access");
                }
                return(eFileOpenFlags.None);
            }

            eFileOpenFlags flags = eFileOpenFlags.O_WRITE;

            switch (mode)
            {
            case FileMode.CreateNew:
                flags |= eFileOpenFlags.O_CREAT | eFileOpenFlags.O_EXCL;
                break;

            case FileMode.Create:
                flags |= eFileOpenFlags.O_CREAT | eFileOpenFlags.O_TRUNC;
                break;

            case FileMode.Open:
                break;

            case FileMode.OpenOrCreate:
                flags |= eFileOpenFlags.O_CREAT;
                break;

            case FileMode.Truncate:
                flags |= eFileOpenFlags.O_TRUNC;
                break;

            case FileMode.Append:
                flags |= eFileOpenFlags.O_APPEND;
                break;
            }
            return(flags);
        }
Пример #2
0
        /// <summary>Open file, return the descriptor</summary>
        static async Task <FileDescriptor> createFileImpl(this Connection conn, object pathOrId, eFileOpenFlags flags)
        {
            RequestBuilder req = conn.newRequest("file_open");

            req.add("flags", (long)flags);

            if (pathOrId is long id)
            {
                req.add("fileid", id);
            }
            else if (pathOrId is string path)
            {
                req.add("path", path);
            }
            else
            {
                throw new ArgumentException("Session.openFile expects either long id, or string path");
            }

            var response = await conn.send(req);

            return(new FileDescriptor(response.dict));
        }
Пример #3
0
        /// <summary>Open an existing file specified by file ID</summary>
        public static Task <FileDescriptor> createFile(this Connection conn, long fileId, FileMode mode, FileAccess access)
        {
            eFileOpenFlags flags = openFlags(mode, access);

            return(conn.createFileImpl(fileId, flags));
        }