예제 #1
0
 public static extern bool CopyFileEx(
     string lpExistingFileName,
     string lpNewFileName,
     APICopyProgressRoutine lpProgressRoutine,
     IntPtr lpData,
     ref Int32 lpCancel,
     CopyFileOptions dwCopyFlags);
예제 #2
0
        public override FileSystemExitCode PutFile(string localName, ref string remoteName, CopyFlags copyFlags)
        {
            bool   overWrite = (CopyFlags.Overwrite & copyFlags) != 0;
            string rmtName   = remoteName.Substring(1);

            if (File.Exists(rmtName) & !overWrite)
            {
                return(FileSystemExitCode.FileExists);
            }
            try {
                if ((CopyFlags.Move & copyFlags) != 0)
                {
                    MoveFileOptions options =
                        (overWrite) ? MoveFileOptions.ReplaceExisting : MoveFileOptions.None;
                    FileRoutines.MoveFile(new FileInfo(localName), new FileInfo(rmtName), options, OnCopyFile);
                }
                else
                {
                    CopyFileOptions options =
                        (overWrite) ? CopyFileOptions.None : CopyFileOptions.FailIfDestinationExists;
                    FileRoutines.CopyFile(new FileInfo(localName), new FileInfo(rmtName), options, OnCopyFile);
                }
                TraceProc(TraceLevel.Warning, "Local file '" + localName + "' transferred!");
                return(FileSystemExitCode.OK);
            } catch (Exception ex) {
                MessageBox.Show(
                    "File operation error:" + Environment.NewLine + ex.Message,
                    "LFS Plugin (PutFile)", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(FileSystemExitCode.WriteError);
            }
        }
예제 #3
0
        public override FileSystemExitCode GetFile(string remoteName, ref string localName, CopyFlags copyFlags,
                                                   RemoteInfo remoteInfo)
        {
            bool overWrite = (CopyFlags.Overwrite & copyFlags) != 0;

            remoteName = remoteName.Substring(1);

            if (File.Exists(localName) & !overWrite)
            {
                return(FileSystemExitCode.FileExists);
            }
            try {
                if ((CopyFlags.Move & copyFlags) != 0)
                {
                    MoveFileOptions options =
                        (overWrite) ? MoveFileOptions.ReplaceExisting : MoveFileOptions.None;
                    FileRoutines.MoveFile(new FileInfo(remoteName), new FileInfo(localName),
                                          options, OnCopyFile);
                }
                else
                {
                    CopyFileOptions options =
                        (overWrite) ? CopyFileOptions.None : CopyFileOptions.FailIfDestinationExists;
                    FileRoutines.CopyFile(new FileInfo(remoteName), new FileInfo(localName),
                                          options, OnCopyFile);
                }
                return(FileSystemExitCode.OK);
            } catch (Exception ex) {
                MessageBox.Show(
                    "File operation error:" + Environment.NewLine + ex.Message,
                    "LFS Plugin (GetFile)", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(FileSystemExitCode.ReadError);
            }
        }
예제 #4
0
        /// <summary> </summary>
        public static void copy_file_to(FileInfo source, FileInfo destination, CopyFileOptions options, CopyFileCallback callback, object state)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (destination == null)
            {
                throw new ArgumentNullException("destination");
            }
            if ((options & ~CopyFileOptions.All) != 0)
            {
                throw new ArgumentOutOfRangeException("options");
            }

            new FileIOPermission(
                FileIOPermissionAccess.Read, source.FullName).Demand();
            new FileIOPermission(
                FileIOPermissionAccess.Write, destination.FullName).Demand();

            CopyProgressRoutine cpr = callback == null ?
                                      null : new CopyProgressRoutine(new CopyProgressData(
                                                                         source, destination, callback, state).CallbackHandler);

            bool cancel = false;

            if (!CopyFileEx(source.FullName, destination.FullName, cpr,
                            IntPtr.Zero, ref cancel, (int)options))
            {
                String custom_message = "\r\n source:" + source.FullName + "\r\n destination:" + destination.FullName;
                logger.writelog("file handling failure:" + custom_message);
                throw new IOException(new Win32Exception().Message.Insert(0, custom_message));
            }
        }
        public static void CopyFile(string source, string destination, CopyFileOptions options, CopyFileCallback callback, object state)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (destination == null)
            {
                throw new ArgumentNullException("destination");
            }
            if ((options & ~CopyFileOptions.All) != 0)
            {
                throw new ArgumentOutOfRangeException("options");
            }

            new FileIOPermission(FileIOPermissionAccess.Read, source).Demand();
            new FileIOPermission(FileIOPermissionAccess.Write, destination).Demand();

            CopyProgressRoutine cpr = callback == null ? null : new CopyProgressRoutine(new CopyProgressData(source, destination, callback, state).CallbackHandler);

            bool cancel = false;
            if (!CopyFileEx(source, destination, cpr, IntPtr.Zero, ref cancel, (int)options))
            {
                throw new IOException(new Win32Exception().Message);
            }
        }
예제 #6
0
파일: File.cs 프로젝트: labeuze/source
 public static bool CopyFile(string sourceFile, string destinationFile, CopyFileOptions options = CopyFileOptions.None)
 {
     if (!zFile.Exists(sourceFile))
         return false;
     if (zFile.Exists(destinationFile))
     {
         if ((options & CopyFileOptions.Overwrite) != CopyFileOptions.Overwrite)
             return false;
         if ((options & CopyFileOptions.CopyOnlyIfNewer) == CopyFileOptions.CopyOnlyIfNewer)
         {
             //FileInfo sourceFileInfo = new FileInfo(sourceFile);
             var sourceFileInfo = zFile.CreateFileInfo(sourceFile);
             //FileInfo destinationFileInfo = new FileInfo(destinationFile);
             var destinationFileInfo = zFile.CreateFileInfo(destinationFile);
             if (destinationFileInfo.LastWriteTimeUtc >= sourceFileInfo.LastWriteTimeUtc)
                 return false;
         }
         bool removeReadOnlyAttribute = false;
         //if ((options & CopyFileOptions.CopyIfDestinationIsReadOnly) == CopyFileOptions.CopyIfDestinationIsReadOnly)
         if ((options & CopyFileOptions.OverwriteReadOnly) == CopyFileOptions.OverwriteReadOnly)
             removeReadOnlyAttribute = true;
         DeleteFile(destinationFile, removeReadOnlyAttribute);
     }
     else
         CreateFileDirectory(destinationFile);
     zFile.Copy(sourceFile, destinationFile);
     return true;
 }
예제 #7
0
        public static void CopyFile(FileInfo source, FileInfo destination,
                                    CopyFileOptions options, CopyFileCallback callback, object state)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            if (destination == null)
            {
                throw new ArgumentNullException("destination");
            }

            if ((options & ~CopyFileOptions.All) != 0)
            {
                throw new ArgumentOutOfRangeException("options");
            }

            new FileIOPermission(FileIOPermissionAccess.Read, source.FullName).Demand();
            new FileIOPermission(FileIOPermissionAccess.Write, destination.FullName).Demand();

            CopyProgressRoutine cpr = (callback == null ?
                                       null : new CopyProgressRoutine(new CopyProgressData(
                                                                          source, destination, callback, state).CallbackHandler));

            bool cancel = false;

            if (!CopyFileEx(source.FullName, destination.FullName, cpr,
                            IntPtr.Zero, ref cancel, (int)options))
            {
                throw new IOException(new Win32Exception().Message);
            }
        }
예제 #8
0
        public async Task CopyFileAsync(FileInfo source, FileInfo destination, CopyFileOptions options, CancellationToken cancellationToken)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (destination == null)
            {
                throw new ArgumentNullException(nameof(destination));
            }
            if ((options & ~CopyFileOptions.All) != 0) // if any bit in options is set which is not defined by CopyFileOptions
            {
                throw new ArgumentOutOfRangeException(nameof(options));
            }

            new FileIOPermission(FileIOPermissionAccess.Read, source.FullName).Demand();
            new FileIOPermission(FileIOPermissionAccess.Write, destination.FullName).Demand();

            CopyProgressRoutine cpr;

            if (CopyFileProgressChanged != null)
            {
                var fileEventArgs = new CopyFileEventArgs(source, destination);

                cpr = (totalFileSize, totalBytesTransferred,
                       streamSize, streamBytesTransferred, streamNumber, callbackReason, sourceFile, destinationFile, data) =>
                {
                    try
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        var copyFileEventArgs = fileEventArgs;
                        copyFileEventArgs.TotalFileSize         = totalFileSize;
                        copyFileEventArgs.TotalBytesTransferred = totalBytesTransferred;

                        OnCopyFileProgressChanged(copyFileEventArgs);

                        return((int)fileEventArgs.CallbackAction);
                    }
                    catch (OperationCanceledException)
                    {
                        return((int)CopyFileCallbackAction.Cancel);
                    }
                };
            }
            else
            {
                cpr = null;
            }

            var cancel           = false;
            var copyFileExResult = await Task.Run(() =>
                                                  CopyFileEx(source.FullName, destination.FullName, cpr, IntPtr.Zero, ref cancel, (int)options), cancellationToken).ConfigureAwait(false);

            if (!copyFileExResult)
            {
                throw new IOException(new Win32Exception().Message);
            }
        }
 /// <summary>
 /// Creates a new instance of <see cref="CopyFileExWrapperData"/>
 /// </summary>
 /// <param name="source">The source file</param>
 /// <param name="destination">The destination file</param>
 /// <param name="options">The options</param>
 /// <param name="callback">The operation callback</param>
 /// <param name="state">The operation state</param>
 /// <param name="cancellationToken">The cancellation token</param>
 public CopyFileExWrapperData(string source, string destination, CopyFileOptions options, CopyFileCallback callback, object state, CancellationToken cancellationToken)
 {
     Source            = source;
     Destination       = destination;
     Options           = options;
     Callback          = callback;
     State             = state;
     CancellationToken = cancellationToken;
 }
예제 #10
0
 static public void CopyFile(
     string sourceFilename,
     string destinationFilename,
     CopyProgressDelegate progressHandler,
     IntPtr userData,
     CopyFileOptions copyOptions)
 {
     CopyFile(sourceFilename, destinationFilename, progressHandler, userData, copyOptions,
              CancellationToken.None);
 }
예제 #11
0
파일: File.cs 프로젝트: labeuze/source
 public static string CopyFileToDirectory(string sourceFile, string destinationDirectory, string destinationFilename = null, CopyFileOptions options = CopyFileOptions.None)
 {
     string destinationFile;
     if (destinationFilename == null)
         destinationFile = zpath.PathSetDirectory(sourceFile, destinationDirectory);
     // vérifier si ce cas est utilisé
     //else if (destinationFilename.EndsWith("\\"))
     //    destinationFile = zPath.Combine(destinationDirectory, destinationFilename + zPath.GetFileName(sourceFile));
     else
         destinationFile = zPath.Combine(destinationDirectory, destinationFilename);
     if (CopyFile(sourceFile, destinationFile, options))
         return destinationFile;
     else
         return null;
 }
예제 #12
0
        static private CopyFileResult CopyFileInternal(
            string sourceFilename,
            string destinationFilename,
            CopyProgressDelegate progressHandler,
            IntPtr userData,
            CopyFileOptions copyOptions,
            CancellationToken cancelToken)
        {
            // On error, throw IOException with the value from Marshal.GetLastWin32Error
            CopyProgressDelegate handler = progressHandler;
            int cancelFlag = 0;
            APICopyProgressRoutine callback;

            if (handler == null)
            {
                callback = null;
            }
            else
            {
                callback = new APICopyProgressRoutine((tfSize, xferBytes, strmSize, strmXferBytes,
                                                       strmNum, cbReason, srcHandle, dstHandle, udata) => {
                    var args = new CopyProgressArgs(tfSize, xferBytes, strmSize, strmXferBytes,
                                                    strmNum, cbReason, srcHandle, dstHandle, udata);
                    handler(args);
                    return((Int32)args.Result);
                });
            }
            if (cancelToken.CanBeCanceled)
            {
                cancelToken.Register(() => { cancelFlag = 1; });
            }
            bool rslt = CopyFileEx(
                sourceFilename,
                destinationFilename,
                callback,
                userData,
                ref cancelFlag,
                copyOptions);
            int err = 0;

            if (!rslt)
            {
                err = Marshal.GetLastWin32Error();
            }
            return(new CopyFileResult(rslt, err));
        }
예제 #13
0
 public override FileSystemExitCode RenMovFile(string oldName, string newName, bool move, bool overwrite,
                                               RemoteInfo remoteInfo)
 {
     oldName = oldName.Substring(1);
     if (!File.Exists(oldName))
     {
         return(FileSystemExitCode.FileNotFound);
     }
     newName = newName.Substring(1);
     if (File.Exists(newName) & !overwrite)
     {
         return(FileSystemExitCode.FileExists);
     }
     try {
         if (move)
         {
             MoveFileOptions options =
                 (overwrite) ? MoveFileOptions.ReplaceExisting : MoveFileOptions.None;
             FileRoutines.MoveFile(new FileInfo(oldName), new FileInfo(newName),
                                   options, OnCopyFile);
         }
         else
         {
             CopyFileOptions options =
                 (overwrite) ? CopyFileOptions.None : CopyFileOptions.FailIfDestinationExists;
             FileRoutines.CopyFile(new FileInfo(oldName), new FileInfo(newName),
                                   options, OnCopyFile);
         }
         return(FileSystemExitCode.OK);
     } catch (IOException ex) {
         if (ex.Message.Equals(ErrorRequestAbortedMsg))
         {
             return(FileSystemExitCode.UserAbort);
         }
         if (ex.Message.Equals(ErrorFileNotFoundMsg))
         {
             return(FileSystemExitCode.FileNotFound);
         }
         MessageBox.Show(
             "File operation error:" + Environment.NewLine + ex.Message,
             "LFS Plugin (RenMovFile)", MessageBoxButtons.OK, MessageBoxIcon.Error);
         return(FileSystemExitCode.ReadError);
     }
 }
예제 #14
0
        static public IAsyncResult BeginCopyFile(
            string sourceFilename,
            string destinationFilename,
            CopyProgressDelegate progressHandler,
            IntPtr userData,
            CopyFileOptions copyOptions,
            CancellationToken cancelToken,
            AsyncCallback callback = null)
        {
            var caller = new CopyFileInvoker(CopyFileInternal);

            return(caller.BeginInvoke(
                       sourceFilename,
                       destinationFilename,
                       progressHandler,
                       userData,
                       copyOptions,
                       cancelToken,
                       callback,
                       null));
        }
예제 #15
0
        static public void CopyFile(
            string sourceFilename,
            string destinationFilename,
            CopyProgressDelegate progressHandler,
            IntPtr userData,
            CopyFileOptions copyOptions,
            CancellationToken cancelToken)
        {
            var rslt = CopyFileInternal(
                sourceFilename,
                destinationFilename,
                progressHandler,
                userData,
                copyOptions,
                cancelToken);

            if (!rslt.ReturnValue)
            {
                throw new IOException(string.Format("Error copying file. GetLastError returns {0}.", rslt.LastError),
                                      rslt.LastError);
            }
        }
예제 #16
0
 public static bool CopyFile(string sourceFile, string destinationFile, CopyFileOptions options = CopyFileOptions.None)
 {
     if (!zFile.Exists(sourceFile))
     {
         return(false);
     }
     if (zFile.Exists(destinationFile))
     {
         if ((options & CopyFileOptions.Overwrite) != CopyFileOptions.Overwrite)
         {
             return(false);
         }
         if ((options & CopyFileOptions.CopyOnlyIfNewer) == CopyFileOptions.CopyOnlyIfNewer)
         {
             //FileInfo sourceFileInfo = new FileInfo(sourceFile);
             var sourceFileInfo = zFile.CreateFileInfo(sourceFile);
             //FileInfo destinationFileInfo = new FileInfo(destinationFile);
             var destinationFileInfo = zFile.CreateFileInfo(destinationFile);
             if (destinationFileInfo.LastWriteTimeUtc >= sourceFileInfo.LastWriteTimeUtc)
             {
                 return(false);
             }
         }
         bool removeReadOnlyAttribute = false;
         //if ((options & CopyFileOptions.CopyIfDestinationIsReadOnly) == CopyFileOptions.CopyIfDestinationIsReadOnly)
         if ((options & CopyFileOptions.OverwriteReadOnly) == CopyFileOptions.OverwriteReadOnly)
         {
             removeReadOnlyAttribute = true;
         }
         DeleteFile(destinationFile, removeReadOnlyAttribute);
     }
     else
     {
         CreateFileDirectory(destinationFile);
     }
     zFile.Copy(sourceFile, destinationFile);
     return(true);
 }
예제 #17
0
        // ReSharper disable once FlagArgument
        private static void CopyFile(FileInfo source, FileInfo destination, CopyFileOptions options, CopyFileCallback callback, object state)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (destination == null)
            {
                throw new ArgumentNullException(nameof(destination));
            }
            if ((options & ~CopyFileOptions.ALL) != 0)
            {
                throw new ArgumentOutOfRangeException(nameof(options));
            }

            var copyProgressRoutine = callback == null ? null : new CopyProgressRoutine(new CopyProgressData(source, destination, callback, state).CallbackHandler);

            bool cancel = false;

            if (!CopyFileEx(source.FullName, destination.FullName, copyProgressRoutine, IntPtr.Zero, ref cancel, (int)options))
            {
                throw new IOException(new Win32Exception().Message);
            }
        }
예제 #18
0
 public static void CopyFile(FileInfo source, FileInfo destination,
                             CopyFileOptions options, CopyFileCallback callback)
 {
     CopyFile(source, destination, options, callback, null);
 }
예제 #19
0
 public static void CopyFile(FileInfo source, FileInfo destination,
                             CopyFileOptions options)
 {
     CopyFile(source, destination, options, null);
 }
예제 #20
0
 public static void MoveFile(FileInfo source, FileInfo destination,
     CopyFileOptions options)
 {
     CopyFile(source, destination, options, null);
     source.Delete();
 }
예제 #21
0
 public static void MoveFile(FileInfo source, FileInfo destination,
     CopyFileOptions options, CopyFileCallback callback, object state)
 {
     CopyFile(source, destination, options, callback, state);
     source.Delete();
 }
예제 #22
0
		public static void CopyFile(FileInfo source, FileInfo destination,
			CopyFileOptions options, CopyFileCallback callback)
		{
			CopyFile(source, destination, options, callback, null);
		}
예제 #23
0
		public static void CopyFile(FileInfo source, FileInfo destination,
			CopyFileOptions options)
		{
			CopyFile(source, destination, options, null);
		}
예제 #24
0
        public static string CopyFileToDirectory(string sourceFile, string destinationDirectory, string destinationFilename = null, CopyFileOptions options = CopyFileOptions.None)
        {
            string destinationFile;

            if (destinationFilename == null)
            {
                destinationFile = zpath.PathSetDirectory(sourceFile, destinationDirectory);
            }
            // vérifier si ce cas est utilisé
            //else if (destinationFilename.EndsWith("\\"))
            //    destinationFile = zPath.Combine(destinationDirectory, destinationFilename + zPath.GetFileName(sourceFile));
            else
            {
                destinationFile = zPath.Combine(destinationDirectory, destinationFilename);
            }
            if (CopyFile(sourceFile, destinationFile, options))
            {
                return(destinationFile);
            }
            else
            {
                return(null);
            }
        }
예제 #25
0
 /// <summary> </summary>
 public static void copy_file_to(FileInfo source, FileInfo destination, CopyFileOptions options)
 {
     copy_file_to(source, destination, options, null);
 }
예제 #26
0
 public static void MoveFile(FileInfo source, FileInfo destination,
                             CopyFileOptions options)
 {
     CopyFile(source, destination, options, null);
     source.Delete();
 }
예제 #27
0
 public static void MoveFile(FileInfo source, FileInfo destination,
                             CopyFileOptions options, CopyFileCallback callback, object state)
 {
     CopyFile(source, destination, options, callback, state);
     source.Delete();
 }
 public static void CopyFile(string source, string destination, CopyFileOptions options, CopyFileCallback callback)
 {
     CopyFile(source, destination, options, callback, null);
 }
 public static void CopyFile(string source, string destination, CopyFileOptions options)
 {
     CopyFile(source, destination, options, null);
 }
예제 #30
0
        public void CopyFile(
            string existingFileName,
            string newFileName,
            IProgress <CopyFileProgress> progress = null,
            CancellationToken ct    = new CancellationToken(),
            CopyFileOptions options = null)
        {
            Int32 pbCancel = 0;

            if (options == null)
            {
                options = new CopyFileOptions();
            }

            var begin = DateTime.UtcNow;

            var progressCallback = progress != null ? new NativeMethods.CopyProgressRoutine(
                (
                    long TotalFileSize,
                    long TotalBytesTransferred,
                    long StreamSize,
                    long StreamBytesTransferred,
                    uint dwStreamNumber,
                    NativeMethods.CopyProgressCallbackReason dwCallbackReason,
                    IntPtr hSourceFile,
                    IntPtr hDestinationFile,
                    IntPtr lpData
                ) =>
            {
                progress.Report(new CopyFileProgress(
                                    begin,
                                    TotalFileSize,
                                    TotalBytesTransferred,
                                    StreamSize,
                                    StreamBytesTransferred,
                                    (int)dwStreamNumber));

                if (ct.IsCancellationRequested)
                {
                    return(NativeMethods.CopyProgressResult.PROGRESS_CANCEL);
                }
                else
                {
                    return(NativeMethods.CopyProgressResult.PROGRESS_CONTINUE);
                }
            }) : null;

            NativeMethods.CopyFileEx(
                existingFileName,
                newFileName,
                progressCallback,
                IntPtr.Zero,
                ref pbCancel,
                (options.AllowDecryptedDestination ? NativeMethods.CopyFileFlags.COPY_FILE_ALLOW_DECRYPTED_DESTINATION : 0) |
                (options.CopySymlink ? NativeMethods.CopyFileFlags.COPY_FILE_COPY_SYMLINK : 0) |
                (options.FailIfExists ? NativeMethods.CopyFileFlags.COPY_FILE_FAIL_IF_EXISTS : 0) |
                (options.NoBuffering ? NativeMethods.CopyFileFlags.COPY_FILE_NO_BUFFERING : 0) |
                (options.OpenSourceForWrite ? NativeMethods.CopyFileFlags.COPY_FILE_OPEN_SOURCE_FOR_WRITE : 0) |
                (options.Restartable ? NativeMethods.CopyFileFlags.COPY_FILE_RESTARTABLE : 0))
            .CheckApiCall(String.Format("copy from {0} to {1}", existingFileName, newFileName));
        }
예제 #31
0
 /// <summary> </summary>
 public static void copy_file_to(FileInfo source, FileInfo destination, CopyFileOptions options, CopyFileCallback callback)
 {
     copy_file_to(source, destination, options, callback, null);
 }