コード例 #1
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
        private void CanFileBeDeleted(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo HandleInfo, ref bool CanBeDeleted)
        {
            bool canBeDeleted = false;

            CBFSWinUtil.Invoke("CanFileBeDeleted", () => canBeDeleted = CanFileBeDeleted(fileInfo, HandleInfo));
            CanBeDeleted = canBeDeleted;
        }
コード例 #2
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
        private void IsDirectoryEmpty(CallbackFileSystem Sender, CbFsFileInfo directoryInfo, string DirectoryName,
                                      ref bool IsEmpty)
        {
            bool isEmpty = false;

            CBFSWinUtil.Invoke("IsDirectoryEmpty", () => isEmpty = IsDirectoryEmpty(directoryInfo, DirectoryName));
            IsEmpty = isEmpty;
        }
コード例 #3
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
        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");
            }
        }
コード例 #4
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
        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");
            }
        }
コード例 #5
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 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");
     }
 }
コード例 #6
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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;
        }
コード例 #7
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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);
        }
コード例 #8
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void CloseDirectoryEnumeration(CallbackFileSystem Sender, CbFsFileInfo directoryInfo, CbFsDirectoryEnumerationInfo directoryEnumerationInfo)
 {
     CBFSWinUtil.Invoke("CloseDirectoryEnumeration", () => CloseDirectoryEnumeration(directoryInfo, directoryEnumerationInfo));
 }
コード例 #9
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 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));
 }
コード例 #10
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void SetEndOfFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, long EndOfFile)
 {
     CBFSWinUtil.Invoke("SetEndOfFile", () => SetEndOfFile(fileInfo, EndOfFile));
 }
コード例 #11
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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;
            }
        }
コード例 #12
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void RenameOrMoveFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, string NewFileName)
 {
     CBFSWinUtil.Invoke("RenameOrMoveFile", () => RenameOrMoveFile(fileInfo, NewFileName));
 }
コード例 #13
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void SetAllocationSize(CallbackFileSystem Sender, CbFsFileInfo fileInfo, long AllocationSize)
 {
     CBFSWinUtil.Invoke("SetAllocationSize", () => SetAllocationSize(fileInfo, AllocationSize));
 }
コード例 #14
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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);
            }*/
        }
コード例 #15
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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);
            }
        }
コード例 #16
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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;
            }
        }
コード例 #17
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
 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();
         }
     }
 }
コード例 #18
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
 private void CbFsCanFileBeDeleted(object sender, CbFsFileInfo FileInfo, CbFsHandleInfo HandleInfo, ref Boolean CanBeDeleted)
 {
     Console.WriteLine("{0}::{1}", "CbFsCanFileBeDeleted", "Event Call.....");
     CanBeDeleted = true;
 }
コード例 #19
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void DeleteFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo)
 {
     CBFSWinUtil.Invoke("DeleteFile", () => DeleteFile(fileInfo));
 }
コード例 #20
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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;
        }
コード例 #21
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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;
            }
        }
コード例 #22
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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();
        }
コード例 #23
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void SetAllocationSize(CbFsFileInfo fileInfo, long AllocationSize);
コード例 #24
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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);
                }
            }
        }
コード例 #25
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void SetEndOfFile(CbFsFileInfo fileInfo, long EndOfFile);
コード例 #26
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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);
                }*/
            }

            // 기본 다운로드는 스트림 연결
            // 또는 작은 파일은 파일 전체를 한번에 받아 캐싱하고 이후에 콜백에 요청만큼 던져준다.
            //      큰 파일은
        }
コード例 #27
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract bool CanFileBeDeleted(CbFsFileInfo fileInfo, CbFsHandleInfo HandleInfo);
コード例 #28
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 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));
 }
コード例 #29
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void CloseDirectoryEnumeration(CbFsFileInfo directoryInfo, CbFsDirectoryEnumerationInfo directoryEnumerationInfo);
コード例 #30
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void OpenFile(string FileName, uint DesiredAccess, uint fileAttributes, uint ShareMode, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo);
コード例 #31
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void SetFileAttributes(CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo, DateTime creationTime,
                                        DateTime lastAccessTime, DateTime lastWriteTime, uint fileAttributes);
コード例 #32
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void CloseFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo)
 {
     CBFSWinUtil.Invoke("CloseFile", () => CloseFile(fileInfo, userContextInfo));
 }
コード例 #33
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void ReadFile(CbFsFileInfo fileInfo, long Position, byte[] Buffer, uint BytesToRead, out uint bytesRead);
コード例 #34
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void CloseFile(CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo);
コード例 #35
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void WriteFile(CbFsFileInfo fileInfo, long Position, byte[] Buffer, uint BytesToWrite, out uint bytesWritten);
コード例 #36
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 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);
コード例 #37
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract bool IsDirectoryEmpty(CbFsFileInfo directoryInfo, string DirectoryName);
コード例 #38
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 private void FlushFile(CallbackFileSystem sender, CbFsFileInfo fileInfo)
 {
     CBFSWinUtil.Invoke("FlushFile", () => FlushFile(fileInfo));
 }
コード例 #39
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void DeleteFile(CbFsFileInfo fileInfo);
コード例 #40
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void FlushFile(CbFsFileInfo FileInfo);
コード例 #41
0
ファイル: ICBFSFuncs.cs プロジェクト: jokalee/Amalgam
 public abstract void RenameOrMoveFile(CbFsFileInfo fileInfo, string NewFileName);
コード例 #42
0
ファイル: OccamDriveForm.cs プロジェクト: exinno/occam-drive
        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);
        }