Esempio n. 1
0
 protected DokanDefaultImplementation(CreateFileDelegate onCreateFile           = null,
                                      OpenDirectoryDelegate onOpenDirectory     = null,
                                      CreateDirectoryDelegate onCreateDirectory = null,
                                      CleanupDelegate onCleanup     = null,
                                      CloseFileDelegate onCloseFile = null,
                                      ReadFileDelegate onReadFile   = null,
                                      WriteFileDelegate onWriteFile = null,
                                      FlushFileBuffersDelegate onFlushFileBuffers     = null,
                                      GetFileInformationDelegate onGetFileInformation = null,
                                      FindFilesDelegate onFindFiles = null,
                                      SetFileAttributesDelegate onSetFileAttributes = null,
                                      SetFileTimeDelegate onSetFileTime             = null,
                                      DeleteFileDelegate onDeleteFile           = null,
                                      DeleteDirectoryDelegate onDeleteDirectory = null,
                                      MoveFileDelegate onMoveFile                   = null,
                                      SetEndOfFileDelegate onSetEndOfFile           = null,
                                      SetAllocationSizeDelegate onSetAllocationSize = null,
                                      LockFileDelegate onLockFile                   = null,
                                      UnlockFileDelegate onUnlockFile               = null,
                                      GetDiskFreeSpaceDelegate onGetDiskFreeSpace   = null,
                                      UnmountDelegate onUnmount = null)
 {
     OnCreateFile         = onCreateFile;
     OnOpenDirectory      = onOpenDirectory;
     OnCreateDirectory    = onCreateDirectory;
     OnCleanup            = onCleanup;
     OnCloseFile          = onCloseFile;
     OnReadFile           = onReadFile;
     OnWriteFile          = onWriteFile;
     OnFlushFileBuffers   = onFlushFileBuffers;
     OnGetFileInformation = onGetFileInformation;
     OnFindFiles          = onFindFiles;
     OnSetFileAttributes  = onSetFileAttributes;
     OnSetFileTime        = onSetFileTime;
     OnDeleteFile         = onDeleteFile;
     OnDeleteDirectory    = onDeleteDirectory;
     OnMoveFile           = onMoveFile;
     OnSetEndOfFile       = onSetEndOfFile;
     OnSetAllocationSize  = onSetAllocationSize;
     OnLockFile           = onLockFile;
     OnUnlockFile         = onUnlockFile;
     OnGetDiskFreeSpace   = onGetDiskFreeSpace;
     OnUnmount            = onUnmount;
 }
 private void BeginThreads()
 {
     while (InProgressActions.Count < MaxActions)
     {
         // Pop a pending action off the queue.
         SyncOperation op;
         lock (PendingFileActions)
         {
             op = PendingFileActions.Dequeue();
         }
         // Kick off a thread.
         switch (op.Action)
         {
             case SyncOperation.SyncAction.Copy:
                 CopyFileDelegate cf = new CopyFileDelegate(File.Copy);
                 lock (InProgressActions)
                 {
                     InProgressActions.Add(cf.BeginInvoke(op.SourceFile, op.TargetFile, FinishAction, cf));
                 }
                 break;
             case SyncOperation.SyncAction.Delete:
                 if (Directory.Exists(op.SourceFile))
                 {
                     DeleteDirectoryDelegate dd = new DeleteDirectoryDelegate(Directory.Delete);
                     lock (InProgressActions)
                     {
                         InProgressActions.Add(dd.BeginInvoke(op.SourceFile, FinishAction, dd));
                     }
                 }
                 else if (File.Exists(op.SourceFile))
                 {
                     DeleteFileDelegate df = new DeleteFileDelegate(File.Delete);
                     lock (InProgressActions)
                     {
                         InProgressActions.Add(df.BeginInvoke(op.SourceFile, FinishAction, df));
                     }
                 }
                 break;
             case SyncOperation.SyncAction.Move:
                 MoveFileDelegate mf = new MoveFileDelegate(File.Move);
                 lock (InProgressActions)
                 {
                     InProgressActions.Add(mf.BeginInvoke(op.SourceFile, op.TargetFile, FinishAction, mf));
                 }
                 break;
             default:
                 break;
         }
     }
 }