Ejemplo n.º 1
0
        private void CanFileBeDeleted(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo HandleInfo, ref bool CanBeDeleted)
        {
            bool canBeDeleted = false;

            CBFSWinUtil.Invoke("CanFileBeDeleted", () => canBeDeleted = CanFileBeDeleted(fileInfo, HandleInfo));
            CanBeDeleted = canBeDeleted;
        }
Ejemplo n.º 2
0
        private void IsDirectoryEmpty(CallbackFileSystem Sender, CbFsFileInfo directoryInfo, string DirectoryName,
                                      ref bool IsEmpty)
        {
            bool isEmpty = false;

            CBFSWinUtil.Invoke("IsDirectoryEmpty", () => isEmpty = IsDirectoryEmpty(directoryInfo, DirectoryName));
            IsEmpty = isEmpty;
        }
Ejemplo n.º 3
0
        private void ReadFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, long Position, byte[] Buffer,
                              int BytesToRead, ref int bytesRead)
        {
            Log.Trace("ReadFile IN");
            uint read = 0;

            try
            {
                ReadFile(fileInfo, Position, Buffer, (uint)BytesToRead, out read);
            }
            catch (Exception ex)
            {
                CBFSWinUtil.BestAttemptToECBFSError(ex);
            }
            finally
            {
                bytesRead = (int)read;
                Log.Trace("ReadFile OUT");
            }
        }
Ejemplo n.º 4
0
        private void WriteFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, long Position, byte[] Buffer,
                               int BytesToWrite, ref int bytesWritten)
        {
            Log.Trace("WriteFile IN");
            uint written = 0;

            try
            {
                WriteFile(fileInfo, Position, Buffer, (uint)BytesToWrite, out written);
            }
            catch (Exception ex)
            {
                CBFSWinUtil.BestAttemptToECBFSError(ex);
            }
            finally
            {
                bytesWritten = (int)written;
                Log.Trace("WriteFile OUT");
            }
        }
Ejemplo n.º 5
0
 private void EnumerateDirectory(CallbackFileSystem Sender, CbFsFileInfo directoryInfo, CbFsHandleInfo HandleInfo,
                                 CbFsDirectoryEnumerationInfo DirectoryEnumerationInfo, string Mask, int Index,
                                 [MarshalAs(UnmanagedType.U1)] bool Restart, ref bool FileFound, ref string FileName, ref string ShortFileName,
                                 ref DateTime CreationTime, ref DateTime LastAccessTime, ref DateTime LastWriteTime, ref long lengthOfFile,
                                 ref long AllocationSize, ref CBFS_LARGE_INTEGER FileId, ref uint FileAttributes)
 {
     Log.Trace("EnumerateDirectory IN");
     try
     {
         EnumerateDirectory(directoryInfo, HandleInfo, DirectoryEnumerationInfo, Mask, Restart,
                            ref FileFound, ref FileName, ref ShortFileName,
                            ref CreationTime, ref LastAccessTime, ref LastWriteTime,
                            ref lengthOfFile, ref AllocationSize, ref FileId, ref FileAttributes);
     }
     catch (Exception ex)
     {
         CBFSWinUtil.BestAttemptToECBFSError(ex);
     }
     finally
     {
         Log.Trace("EnumerateDirectory OUT");
     }
 }
Ejemplo n.º 6
0
        private void CbFsSetEndOfFile(object sender, CbFsFileInfo FileInfo, Int64 EndOfFile)
        {
            Console.WriteLine("{0}::{1}", "CbFsSetEndOfFile", "Event Call.....");
            VirtualFile vfile = (VirtualFile)GCHandle.FromIntPtr(FileInfo.UserContext).Target;

            vfile.EndOfFile = EndOfFile;
        }
Ejemplo n.º 7
0
        private void CbFsDeleteFile(object sender, CbFsFileInfo  FileInfo)
        {
            Console.WriteLine("{0}::{1}", "CbFsDeleteFile", "Event Call.....");
            VirtualFile vfile = null;

            FindVirtualFile(FileInfo.FileName, ref vfile);
            vfile.Remove();

            g_OccamFile.Remove(FileInfo.FileName);
        }
Ejemplo n.º 8
0
 private void CloseDirectoryEnumeration(CallbackFileSystem Sender, CbFsFileInfo directoryInfo, CbFsDirectoryEnumerationInfo directoryEnumerationInfo)
 {
     CBFSWinUtil.Invoke("CloseDirectoryEnumeration", () => CloseDirectoryEnumeration(directoryInfo, directoryEnumerationInfo));
 }
Ejemplo n.º 9
0
 private void SetFileAttributes(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo, DateTime CreationTime,
                                DateTime LastAccessTime, DateTime LastWriteTime, uint FileAttributes)
 {
     CBFSWinUtil.Invoke("SetFileAttributes", () =>
                        SetFileAttributes(fileInfo, userContextInfo, CreationTime, LastAccessTime, LastWriteTime, FileAttributes));
 }
Ejemplo n.º 10
0
 private void SetEndOfFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, long EndOfFile)
 {
     CBFSWinUtil.Invoke("SetEndOfFile", () => SetEndOfFile(fileInfo, EndOfFile));
 }
Ejemplo n.º 11
0
        private void CbFsSetFileAttributes(
            object sender,
            CbFsFileInfo FileInfo,
			CbFsHandleInfo HandleInfo,
            DateTime CreationTime,
            DateTime LastAccessTime,
            DateTime LastWriteTime,
            uint Attributes
            )
        {
            Console.WriteLine("{0}::{1}", "CbFsSetFileAttributes", "Event Call.....");
            GCHandle gch = GCHandle.FromIntPtr(FileInfo.UserContext);

            VirtualFile vfile = (VirtualFile)gch.Target;

            // the case when FileAttributes == 0 indicates that file attributes
            // not changed during this callback

            if (Attributes != 0)
                vfile.Attributes = (FileAttributes)Attributes;

            if(CreationTime != DateTime.MinValue)
            {
                vfile.CreationTime = CreationTime;
            }
            if(LastAccessTime != DateTime.MinValue)
            {
                vfile.LastAccessTime = LastAccessTime;
            }
            if(LastWriteTime != DateTime.MinValue)
            {
                vfile.LastWriteTime = LastWriteTime;
            }
        }
Ejemplo n.º 12
0
 private void RenameOrMoveFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, string NewFileName)
 {
     CBFSWinUtil.Invoke("RenameOrMoveFile", () => RenameOrMoveFile(fileInfo, NewFileName));
 }
Ejemplo n.º 13
0
 private void SetAllocationSize(CallbackFileSystem Sender, CbFsFileInfo fileInfo, long AllocationSize)
 {
     CBFSWinUtil.Invoke("SetAllocationSize", () => SetAllocationSize(fileInfo, AllocationSize));
 }
Ejemplo n.º 14
0
        private void CbFsWriteFile(
            object sender,
            CbFsFileInfo FileInfo,
            long Position,
            byte[] Buffer,
            int BytesToWrite,
            ref int BytesWritten)
        {
            //Console.WriteLine("{0}::{1}", "CbFsWriteFile", "Event Call.....");
            GCHandle gch = GCHandle.FromIntPtr(FileInfo.UserContext);

            VirtualFile vfile = (VirtualFile)gch.Target;

            BytesWritten = 0;

            vfile.LastWriteTime = DateTime.UtcNow;

            if (Position == 0) // remote webserver http stream 연결
                g_OccamFile.CreateWriteFileStream(vfile, FileInfo.FileName, "Content", ref vfile.WriteFileStreamOfRemote, ref vfile.tailBoundarybytes);

            vfile.Write(Buffer, Position, BytesToWrite, ref BytesWritten,
                    (vfile.EndOfFile == (Position + BytesToWrite) ? true : false));

            /*

            // 파일의 크기가 클 경우 remote webserver와 http stream 으로 파이프 연결 하 듯이 연결해서 계속 upload.
            if (vfile.EndOfFile > Tool.MegabytesToBytes((long)30)) {
                // 파일의 크기가 30MB 보다 클 경우
                if (Position == 0) // remote webserver http stream 연결
                    g_OccamFile.CreateWriteFileStream(vfile, FileInfo.FileName, "Content", ref vfile.WriteFileStreamOfRemote, ref vfile.tailBoundarybytes);

                vfile.Write(Buffer, Position, BytesToWrite, ref BytesWritten,
                        (vfile.EndOfFile == (Position + BytesToWrite) ? true : false));
            } else {
                vfile.Write(Buffer, Position, BytesToWrite, ref BytesWritten);
            }*/
        }
Ejemplo n.º 15
0
        private void CbFsCreateFile(object sender,
            string FileName,
            uint DesiredAccess,
            uint FileAttributes,
            uint ShareMode,
			CbFsFileInfo FileInfo,
			CbFsHandleInfo HandleInfo
            )
        {
            Console.WriteLine("{0}::{1}", "CbFsCreateFile", "Event Call.....");

            // TODO : HTTP Get Query.
            // url is create-file
            // parameter is deviceId, driveLetter, filePath
            // response body is null.

            VirtualFile vfile = null, vdir = null;

            try {

                FindVirtualDirectory(FileName, ref vdir);
                vfile = new VirtualFile(GetFileName(FileName));

                vfile.Attributes = (FileAttributes)FileAttributes;

                vfile.CreationTime = vfile.LastAccessTime = vfile.LastWriteTime = DateTime.UtcNow;

                vdir.AddFile(vfile);

                GCHandle gch = GCHandle.Alloc(vfile);

                FileInfo.UserContext = GCHandle.ToIntPtr(gch);

                if (FileAttributes == 16) {
                    Console.WriteLine("\t \t is Directory");
                    g_OccamFile.WriteFile(vfile, FileInfo.FileName, "Folder");
                    vfile.Waiting();
                }

            }
            catch (Exception err) {
                Console.WriteLine("{0}::{1}", "\t CbFsCreateFile.Exception", err.Message);
            }
        }
Ejemplo n.º 16
0
        private void CbFsCloseFile(object sender, CbFsFileInfo FileInfo, CbFsHandleInfo HandleInfo)
        {
            //Console.WriteLine("{0}::{1}", "CbFsCloseFile", "Event Call.....");
            if(FileInfo.UserContext != IntPtr.Zero)
            {
                GCHandle gch = GCHandle.FromIntPtr(FileInfo.UserContext);
                /*
                VirtualFile vfile = (VirtualFile)gch.Target;
                if (vfile.GetVFStatus.Equals(VirtualFileStatus.Writing)) {
                    g_OccamFile.WriteFile(vfile, FileInfo.FileName, "Content");
                    vfile.Waiting();
                }
                vfile.CloseAndNewStream();
                */
                gch.Free();

                FileInfo.UserContext = IntPtr.Zero;
            }
        }
Ejemplo n.º 17
0
 private void CbFsCloseDirectoryEnumeration(object sender, CbFsFileInfo DirectoryInfo, CbFsDirectoryEnumerationInfo EnumerationInfo)
 {
     //Console.WriteLine("{0}::{1}", "CbFsCloseDirectoryEnumeration", "Event Call.....");
     if (!EnumerationInfo.UserContext.Equals(IntPtr.Zero))
     {
         if (GCHandle.FromIntPtr(EnumerationInfo.UserContext).IsAllocated)
         {
             ENUM_INFO pInfo = (ENUM_INFO)GCHandle.FromIntPtr(EnumerationInfo.UserContext).Target;
             GCHandle.FromIntPtr(EnumerationInfo.UserContext).Free();
         }
     }
 }
Ejemplo n.º 18
0
 private void CbFsCanFileBeDeleted(object sender, CbFsFileInfo FileInfo, CbFsHandleInfo HandleInfo, ref Boolean CanBeDeleted)
 {
     Console.WriteLine("{0}::{1}", "CbFsCanFileBeDeleted", "Event Call.....");
     CanBeDeleted = true;
 }
Ejemplo n.º 19
0
 private void DeleteFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo)
 {
     CBFSWinUtil.Invoke("DeleteFile", () => DeleteFile(fileInfo));
 }
Ejemplo n.º 20
0
        private void CbFsEnumerateDirectory(
            object sender,
            CbFsFileInfo DirectoryInfo,
			CbFsHandleInfo HandleInfo,
			CbFsDirectoryEnumerationInfo EnumerationInfo,
            string Mask,
            int Index,
            bool Restart,
            ref bool FileFound,
            ref string FileName,
            ref string ShortFileName,
            ref DateTime CreationTime,
            ref DateTime LastAccessTime,
            ref DateTime LastWriteTime,
            ref long EndOfFile,
            ref long AllocationSize,
            ref CBFS_LARGE_INTEGER FileId,
            ref uint FileAttributes
            )
        {
            //Console.WriteLine("{0}::{1}", "CbFsEnumerateDirectory", "Event Call.....");
            //Console.WriteLine("{0}::{1}::{2}", "CbFsEnumerateDirectory \t DirectoryInfo.FileName", DirectoryInfo.FileName, Mask);

            bool ResetEnumeration = false;
            bool ExactMatch = false;
            FileFound = false;
            ENUM_INFO pInfo = null;
            VirtualFile vfile = null, vdir = null;

            ExactMatch = !Mask.Equals("*");

            if ((Restart || EnumerationInfo.UserContext == IntPtr.Zero) && !ExactMatch) {
                ResetEnumeration = true;
                //Console.WriteLine("{0}", " \t Restart.");
            }

            if (Restart && (EnumerationInfo.UserContext != IntPtr.Zero)) {
                if (GCHandle.FromIntPtr(EnumerationInfo.UserContext).IsAllocated) {
                    GCHandle.FromIntPtr(EnumerationInfo.UserContext).Free();
                }
                EnumerationInfo.UserContext = IntPtr.Zero;
                //Console.WriteLine("{0}", " \t EnumerationInfo.UserContext = IntPtr.Zero");
            }

            if (EnumerationInfo.UserContext.Equals(IntPtr.Zero)) {

                //Console.WriteLine("{0}::{1}", "\t Restart", Restart);

                pInfo = new ENUM_INFO();

                GCHandle gch = GCHandle.Alloc(pInfo);

                EnumerationInfo.UserContext = GCHandle.ToIntPtr(gch);

                FindVirtualFile(DirectoryInfo.FileName, ref vdir);

                //Mask가 * 이 아니면 파일 실행시이다.
                //

                // 전체(*)를 가져와야 할 경우 Web에서 리스트를 가져온다, 파일 실행 시 제외.

                if (!ExactMatch && vdir.CanLoadList()) {
                    // occam 에서 리스트 가져오기
                    ListDirectory occamList = g_OccamFile.getList(DirectoryInfo.FileName);
                    int count = occamList.Total;

                    vdir.SetLoadListTime();

                    for (int i = 0; i < count; i++) {
                        string fileName = occamList.Data[i].Name.Replace("/", "\\");

                        VirtualFile replaceVfile = null;
                        if (vdir.Context.GetFile(fileName, ref replaceVfile) == false) {
                            // 새로 만들기
                            replaceVfile = new VirtualFile(GetFileName(fileName));//, contentSize);
                            replaceVfile.Attributes = (FileAttributes)(occamList.Data[i].ItemType.Equals("Folder") ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL);
                            replaceVfile.EndOfFile = occamList.Data[i].ContentSize;
                            replaceVfile.CreationTime = Convert.ToDateTime(occamList.Data[i].CreatedDate);
                            replaceVfile.LastAccessTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate);
                            replaceVfile.LastWriteTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate); // TODO : writetime 값 가져오기

                            replaceVfile.Waiting();
                            vdir.AddFile(replaceVfile);
                        } else if (replaceVfile.EndOfFile != occamList.Data[i].ContentSize) {
                            // reset
                            replaceVfile.Attributes = (FileAttributes)(occamList.Data[i].ItemType.Equals("Folder") ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL);
                            replaceVfile.EndOfFile = occamList.Data[i].ContentSize;
                            replaceVfile.CreationTime = Convert.ToDateTime(occamList.Data[i].CreatedDate);
                            replaceVfile.LastAccessTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate);
                            replaceVfile.LastWriteTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate); // TODO : writetime 값 가져오기

                            replaceVfile.Waiting();
                            vdir.AddFile(replaceVfile);
                        }
                    }

                    // vdir file count loop
                    int vCount = vdir.Context.GetCount();

                    for (int i = 0; i < vCount; i++) {
                        VirtualFile replaceVfile = null;
                        vdir.Context.GetFile(i, ref replaceVfile);

                        Item OccamData = null;
                        if (occamList.GetItem(replaceVfile.Name, ref OccamData) == false) {
                            //remove
                            if(replaceVfile.GetVFStatus.Equals(VirtualFileStatus.Waiting)) {
                                vdir.Context.Remove(replaceVfile);
                            }
                        }
                    }
                }

                pInfo.vfile = vdir;

                //Console.WriteLine("{0}", " \t create a vfile.");

            } else {
                pInfo = (ENUM_INFO)GCHandle.FromIntPtr(EnumerationInfo.UserContext).Target;

                vdir = pInfo.vfile;

                //Console.WriteLine("{0}", " \t EnumerationInfo.UserContext use.");
            }

            if (ResetEnumeration) {
                pInfo.Index = 0;
                //Console.WriteLine("{0}", " \t pInfo.Index = 0");
            } else {
                //Console.WriteLine("{0}::{1}", "pInfo.Index", pInfo.Index);
            }

            if (pInfo.ExactMatch == true) {
                FileFound = false;
                //Console.WriteLine("{0}", " \t File found.");
            } else {
                FileFound = ExactMatch ?
                    vdir.Context.GetFile(Mask, ref vfile) : vdir.Context.GetFile(pInfo.Index, ref vfile);
                //Console.WriteLine("{0}", " \t file not found.");
            }

            if (FileFound) {
                //Console.WriteLine("{0}::{1}", " \t create file", vfile.Name);
                FileName = vfile.Name;

                CreationTime = vfile.CreationTime;

                LastAccessTime = vfile.LastAccessTime;

                LastWriteTime = vfile.LastWriteTime;

                EndOfFile = vfile.EndOfFile;

                AllocationSize = vfile.AllocationSize;

                FileId.QuadPart = 0;

                FileAttributes = Convert.ToUInt32(vfile.Attributes);

            }
            pInfo.ExactMatch = ExactMatch;
            ++pInfo.Index;
        }
Ejemplo n.º 21
0
        private void CbFsSetAllocationSize(object sender, CbFsFileInfo FileInfo, Int64 AllocationSize)
        {
            Console.WriteLine("{0}::{1}", "CbFsSetAllocationSize", "Event Call.....");

            // TODO : HTTP Get Query.
            // url is set-allocation-size
            // parameter is deviceId, driveLetter, filePath, allocationSize
            // response body is null.

            if (AllocationSize < Tool.MegabytesToBytes((long)30)) {

                VirtualFile vfile = (VirtualFile)GCHandle.FromIntPtr(FileInfo.UserContext).Target;

                vfile.AllocationSize = AllocationSize;
            }
        }
Ejemplo n.º 22
0
        private void CbFsIsDirectoryEmpty(
			object Sender,
			CbFsFileInfo DirectoryInfo,
			string FileName,
			ref Boolean IsEmpty
			)
        {
            Console.WriteLine("{0}::{1}", "CbFsIsDirectoryEmpty", "Event Call.....");
            VirtualFile vdir = null;

            IsEmpty = false;
            if (FindVirtualFile(FileName, ref vdir))
                IsEmpty = vdir.Context.IsEmpty();
        }
Ejemplo n.º 23
0
 public abstract void SetAllocationSize(CbFsFileInfo fileInfo, long AllocationSize);
Ejemplo n.º 24
0
        private void CbFsOpenFile(object sender,
            string FileName,
            uint DesiredAccess,
            uint FileAttributes,
            uint ShareMode,
			CbFsFileInfo FileInfo,
			CbFsHandleInfo HandleInfo
            )
        {
            //Console.WriteLine("{0}::{1}", "CbFsOpenFile", "Event Call.....");
            //Console.WriteLine("{0}::{1}", "\t FileName", FileName);
            //Console.WriteLine("{0}::{1}", "\t FileAttributes", FileAttributes);

            if(FileInfo.UserContext.Equals(IntPtr.Zero))
            {
                //Console.WriteLine("{0}::{1}", "\t UserContext", "Zero");
                VirtualFile vfile = null;
                if (FindVirtualFile(FileName, ref vfile))
                {
                    //Console.WriteLine("{0}::{1}", "\t FindVirtualFile", "true");
                    GCHandle gch = GCHandle.Alloc(vfile);
                    FileInfo.UserContext = GCHandle.ToIntPtr(gch);
                }
            }
        }
Ejemplo n.º 25
0
 public abstract void SetEndOfFile(CbFsFileInfo fileInfo, long EndOfFile);
Ejemplo n.º 26
0
        private void CbFsReadFile(
            CallbackFileSystem sender,
            CbFsFileInfo FileInfo,
            long Position, 
            byte[] Buffer,
            int BytesToRead,
            ref int BytesRead
            )
        {
            //Console.WriteLine("{0}::{1}", "CbFsReadFile", "Event Call.....");
            //Console.WriteLine("{0}::{1}", "\t FileInfo.FileName", FileInfo.FileName);
            //Console.WriteLine("{0}::{1}", "\t\t\t\t CbFsReadFile.Position", Position);

            ACCESS_MASK processId = new ACCESS_MASK() ;
            sender.GetOriginatorProcessId(ref processId);

            GCHandle gch = GCHandle.FromIntPtr(FileInfo.UserContext);

            VirtualFile vfile = (VirtualFile)gch.Target;

            if (vfile.EndOfFile <= 5242880) { // 5242880 5MB
                // 한번에 받기
                if ( !vfile.IsGetStreamToRemote ) {
                    MemoryStream ms = new MemoryStream();
                    g_OccamFile.ReadFile(FileInfo.FileName, ref ms);

                    byte[] buffer = new byte[8192];
                    int bytesRead;
                    long ps = Position;
                    int readByte = 0;

                    ms.Seek(0, SeekOrigin.Begin);
                    while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) > 0) {
                        vfile.Write(buffer, ps, bytesRead, ref readByte);
                        ps += readByte;
                    }

                    vfile.IsGetStreamToRemote = true;
                }
                vfile.Read(Buffer, Position, BytesToRead, ref BytesRead);
            } else {
                if (!vfile.CanReadToCache(Position, BytesToRead)) {
                    //vfile.CloseAndNewCache();
                    int readSize = (int)BytesToRead * 200;
                    if (vfile.EndOfFile < readSize)
                        readSize = (int)vfile.EndOfFile;

                    byte[] readBuffer = new byte[readSize];
                    int bytesRead1 = 0;
                    int bytesRead2 = 0;
                    g_OccamFile.ReadFile(FileInfo.FileName, readBuffer, Position, readSize, ref bytesRead1);
                    vfile.WriteCache(readBuffer, Position, bytesRead1, ref bytesRead2);
                }
                vfile.ReadCache(Buffer, Position, BytesToRead, ref BytesRead);

                /*
                if (!vfile.CanReadToStream(Position, BytesToRead)) {

                    vfile.CloseReadFileStream();

                    int bytesToReadStream = (vfile.EndOfFile > (Position + BytesToRead * 100)) ? (int)(BytesToRead * 100) : (int)(vfile.EndOfFile - Position);
                    g_OccamFile.CreateReadFileStream(FileInfo.FileName, Position, bytesToReadStream, ref vfile.ReadFileStreamOfRemote);

                    vfile.SetStreamInfo(Position, Position + (long) bytesToReadStream);

                }
                bool IsEnd = (vfile.EndOfFile == (Position + BytesToRead)) ? true : false;
                vfile.Read(Buffer, Position, BytesToRead, ref BytesRead, IsEnd);

                */

                //g_OccamFile.ReadFile(FileInfo.FileName, Buffer, Position, BytesToRead, ref BytesRead);
                /*
                // 캐싱 함
                long cachedSize = vfile.GetCachedSize();
                if (cachedSize >= (Position + BytesToRead)) { // 캐싱되어 있음.
                    vfile.Read(Buffer, Position, BytesToRead, ref BytesRead);
                } else { // 캐싱 노노
                    int readSize = (int)BytesToRead * 50;
                    if (vfile.EndOfFile < readSize)
                        readSize = (int)vfile.EndOfFile;

                    byte[] readBuffer = new byte[readSize];
                    int bytesRead1 = 0;
                    int bytesRead2 = 0;

                    g_OccamFile.ReadFile(FileInfo.FileName, readBuffer, Position, readSize, ref bytesRead1);

                    vfile.Write(readBuffer, Position, bytesRead1, ref bytesRead2);

                    vfile.Read(Buffer, Position, BytesToRead, ref BytesRead);
                }*/
            }

            // 기본 다운로드는 스트림 연결
            // 또는 작은 파일은 파일 전체를 한번에 받아 캐싱하고 이후에 콜백에 요청만큼 던져준다.
            //      큰 파일은
        }
Ejemplo n.º 27
0
 public abstract bool CanFileBeDeleted(CbFsFileInfo fileInfo, CbFsHandleInfo HandleInfo);
Ejemplo n.º 28
0
 private void OpenFile(CallbackFileSystem Sender, string FileName, uint DesiredAccess, uint fileAttributes, uint ShareMode,
                       CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo)
 {
     CBFSWinUtil.Invoke("OpenFile", () => OpenFile(FileName, DesiredAccess, fileAttributes, ShareMode, fileInfo, userContextInfo));
 }
Ejemplo n.º 29
0
 public abstract void CloseDirectoryEnumeration(CbFsFileInfo directoryInfo, CbFsDirectoryEnumerationInfo directoryEnumerationInfo);
Ejemplo n.º 30
0
 public abstract void OpenFile(string FileName, uint DesiredAccess, uint fileAttributes, uint ShareMode, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo);
Ejemplo n.º 31
0
 public abstract void SetFileAttributes(CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo, DateTime creationTime,
                                        DateTime lastAccessTime, DateTime lastWriteTime, uint fileAttributes);
Ejemplo n.º 32
0
 private void CloseFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo)
 {
     CBFSWinUtil.Invoke("CloseFile", () => CloseFile(fileInfo, userContextInfo));
 }
Ejemplo n.º 33
0
 public abstract void ReadFile(CbFsFileInfo fileInfo, long Position, byte[] Buffer, uint BytesToRead, out uint bytesRead);
Ejemplo n.º 34
0
 public abstract void CloseFile(CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo);
Ejemplo n.º 35
0
 public abstract void WriteFile(CbFsFileInfo fileInfo, long Position, byte[] Buffer, uint BytesToWrite, out uint bytesWritten);
Ejemplo n.º 36
0
 public abstract void EnumerateDirectory(CbFsFileInfo directoryInfo, CbFsHandleInfo HandleInfo,
                                         CbFsDirectoryEnumerationInfo DirectoryEnumerationInfo, string Mask, bool Restart,
                                         ref bool FileFound, ref string FileName, ref string ShortFileName,
                                         ref DateTime CreationTime, ref DateTime LastAccessTime, ref DateTime LastWriteTime, ref long lengthOfFile,
                                         ref long AllocationSize, ref CBFS_LARGE_INTEGER FileId, ref uint FileAttributes);
Ejemplo n.º 37
0
 public abstract bool IsDirectoryEmpty(CbFsFileInfo directoryInfo, string DirectoryName);
Ejemplo n.º 38
0
 private void FlushFile(CallbackFileSystem sender, CbFsFileInfo fileInfo)
 {
     CBFSWinUtil.Invoke("FlushFile", () => FlushFile(fileInfo));
 }
Ejemplo n.º 39
0
 public abstract void DeleteFile(CbFsFileInfo fileInfo);
Ejemplo n.º 40
0
 public abstract void FlushFile(CbFsFileInfo FileInfo);
Ejemplo n.º 41
0
 public abstract void RenameOrMoveFile(CbFsFileInfo fileInfo, string NewFileName);
Ejemplo n.º 42
0
        private void CbFsRenameOrMoveFile(object sender, CbFsFileInfo FileInfo, string NewFileName)
        {
            Console.WriteLine("{0}::{1}", "CbFsRenameOrMoveFile", "Event Call.....");
            VirtualFile vfile = null, vdir = null;

            FindVirtualFile(FileInfo.FileName, ref vfile);
            FindVirtualDirectory(NewFileName, ref vdir);

            vfile.Remove();

            vfile.Rename(GetFileName(NewFileName));//obtain file name from the path;

            vdir.AddFile(vfile);

            g_OccamFile.Rename(FileInfo.FileName, NewFileName);
        }