Пример #1
0
 /*
  * /// <summary>
  * /// usees 7zip
  * /// </summary>
  * /// <returns>zipArchive as RsbFile or null</returns>
  * public RaiFile Zip7()
  * {
  *      var zip7 = new RaiFile(FullName + ".7z");
  *      zip7.rm();  // remove it if an old version exists
  *                              //var oldCurrentDir = Directory.GetCurrentDirectory();
  *                              //Directory.SetCurrentDirectory("c:\\Program Files\\7-Zip\\");
  *      var call = new RaiSystem("7z", "a -mmt " + Os.escapeParam(zip7.FullName) + " " + Os.escapeParam(FullName));
  *      call.Exec();
  *      //Directory.SetCurrentDirectory(oldCurrentDir);
  *      if (call.ExitCode == 0 && zip7.Exists())
  *      {
  *              rm();
  *              return zip7;
  *      }
  *      return null;
  * }
  */
 /*
  * /// <summary>
  * /// usees 7zip with options -t7z -m0=lzma2 -mx=9 -aoa
  * /// </summary>
  * /// <returns>zipArchive as RsbFile or null</returns>
  * public RaiFile ZipUltra()
  * {
  *      var zip7 = new RaiFile(FullName + ".7z");
  *      zip7.rm();  // remove it if an old version exists
  *                              //var oldCurrentDir = Directory.GetCurrentDirectory();
  *                              //Directory.SetCurrentDirectory("c:\\Program Files\\7-Zip\\");
  *      var call = new RaiSystem("7z", "a -t7z -m0=lzma2 -mx=9 -aoa " + Os.escapeParam(zip7.FullName) + " " + Os.escapeParam(FullName));
  *      call.Exec();
  *      //Directory.SetCurrentDirectory(oldCurrentDir);
  *      if (call.ExitCode == 0 && zip7.Exists())
  *      {
  *              rm();
  *              return zip7;
  *      }
  *      return null;
  * }
  */
 /*
  * /// <summary>
  * /// unzip an 7z archive using 7z commandline
  * /// </summary>
  * /// <returns>and RsbFile - use the Path to identify where the taget file(s) are located</returns>
  * public RaiFile UnZip7()
  * {
  *      var unzipped = new RaiFile(FullName.Substring(0, FullName.IndexOf(".7z")));
  *      var call = new RaiSystem("7z", "e " + Os.escapeParam(FullName) + " -o" + unzipped.Path);
  *      call.Exec();
  *      // do not remove 7z file
  *      return unzipped;
  * }
  */
 /// <summary>
 /// copies the file on disk identified by the current RsbFile object to multiple destinations
 /// </summary>
 /// <param name="destDirs"></param>
 /// <returns></returns>
 public bool CopyTo(string[] destDirs)
 {
     try
     {
         RaiFile dest;
         string  destName;
         foreach (var destDir in destDirs)
         {
             dest = new RaiFile(FullName)
             {
                 Path = destDir
             };
             destName = dest.FullName;
             dest.mkdir();
             if (File.Exists(destName))
             {
                 File.Delete(destName);
             }
             File.Copy(FullName, destName);
         }
     }
     catch (Exception)
     {
         return(false);
     }
     return(true);
 }
Пример #2
0
        /// <summary>
        /// Copy file
        /// </summary>
        /// <param name="from">will be checked; exception will be thrown if file name does not match RsbFile form requirements</param>
        /// <returns>0 if everything went well</returns>
        public int cp(RaiFile from)
        {         // copy file in the file system
            var oldname = Os.winInternal(from.FullName);
            var newname = Os.winInternal(FullName);

            rm();                              // make sure it's really gone before we go ahead; applies ensure
            File.Copy(oldname, newname, true); // overwrite if exists (which should never happen since we just removed it)
            #region double check if file has moved
            if (Ensure)
            {
                return(awaitFileMaterializing(newname));
            }
            #endregion
            return(0);
        }
Пример #3
0
        public int mv(RaiFile from)                 // relocates file in the file system
        {
            //bool destIsDropbox = Name.ToLower().Contains("dropbox");
            //bool srcIsDropbox = from.Name.ToLower().Contains("dropbox");
            //#region both files in Dropbox - no acceleration
            //#endregion
            mkdir();             // create destdir if necessary; applies ensure
            var newname = Os.winInternal(FullName);
            var oldname = Os.winInternal(from.FullName);

            rm();                        // make sure it's really gone before we go ahead; applies ensure
            File.Move(oldname, newname); // make sure the user that w3wp runs under has write/delete access to oldname, i.e. c:\dropbox\config\3.3.3\Users.xml
            #region double check if file has moved
            if (Ensure)
            {
                return(awaitFileVanishing(oldname) + awaitFileMaterializing(newname));
            }
            #endregion
            return(0);
        }
Пример #4
0
 /// <summary>
 /// Constructor: auto-ensure mode for file systems that do not synchronously wait for the end of an IO operation i.e. Dropbox
 /// </summary>
 /// <remarks>only use the ensure mode if it has to be guaranteed that the IO operation was completely done
 /// when the method call returns; necessary e.g. for Dropbox directories since (currently) Dropbox first updates the
 /// file in the invisible . folder and then asynchronously updates the visible file and all the remote copies of it</remarks>
 /// <param name="filename"></param>
 public RaiFile(string filename)
 {
     Ensure = filename.ToLower().Contains("dropbox");
     path   = string.Empty;
     name   = string.Empty;
     ext    = string.Empty;
     if (!string.IsNullOrEmpty(filename))
     {
         #region some unix conventions for convenience
         if (filename.StartsWith("~/"))
         {
             filename = $"{Os.HomeDir}{filename.Substring(1)}";
         }
         else if (filename.StartsWith("./"))
         {
             filename = $"{Directory.GetCurrentDirectory()}{filename.Substring(1)}";
         }
         else if (filename.StartsWith("../"))
         {
             var dir = Directory.GetCurrentDirectory();
             while (filename.StartsWith("../"))
             {
                 dir      = new RaiFile(dir.TrimEnd('/')).Path;                      // one up
                 filename = filename.Substring(3);                                   // remove first ../
             }
             filename = $"{dir}{filename}";
         }
         #endregion
         filename = Os.NormSeperator(filename);
         var k = filename.LastIndexOf(Os.DIRSEPERATOR);
         if (k >= 0)
         {
             path = filename.Substring(0, k + 1);
             Name = filename.Substring(k + 1);
         }
         else
         {
             Name = filename;                    // also takes care of ext
         }
     }
 }
Пример #5
0
        /// <summary>
        /// zip this file into archive
        /// </summary>
        /// <returns>the archive name</returns>
        public RaiFile Zip()
        {
            var inFolder = new RaiFile(this.FullName);
            var file     = new RaiFile(this.FullName);

            inFolder.Name = file.Name;
            inFolder.Path = inFolder.Path + inFolder.Name;
            inFolder.mv(file);
            file.Ext = file.Ext + ".zip";
            File.Delete(file.FullName);               // delete any pre-existing file
            try
            {
                ZipFile.CreateFromDirectory(inFolder.Path, file.FullName);
                //ZipFile.
            }
            catch (Exception)
            {
                return(null);
            }
            return(file);
        }
Пример #6
0
        /// <summary>create a backup file</summary>
        /// <param name="copy">moves if false, copies otherwise</param>
        /// <returns>name of backupfile, if there was one created</returns>
        /// <remarks>the Os.LocalBackupDir will be used; make sure it's not in the Dropbox</remarks>
        public string backup(bool copy = false)
        {
            if (!File.Exists(FullName))
            {
                return(null);                  // no file no backup
            }
            var backupFile = new RaiFile(FullName);
            var idx        = (backupFile.Path.Length > 2 && backupFile.Path[1] == ':') ? 3 : 0;          // works as expected for c:/123 or c:\123, but not for c:123
            var s          = backupFile.Path.Substring(idx);

            backupFile.Path = (Os.LocalBackupDir + s).Replace("Dropbox/", "").Replace("dropbox/", "");               // eliminates Dropbox for LocalBackupDir to avoid ensure
            mkdir(backupFile.Path);
            backupFile.Name = backupFile.Name + " " + DateTimeOffset.UtcNow.ToString(Os.DATEFORMAT);
            backupFile.Ext  = Ext;
            if (copy)
            {
                backupFile.cp(this);
            }
            else
            {
                backupFile.mv(this);
            }
            return(backupFile.FullName);
        }