private void ChangeAttributesOnFolders(SyncPostProcContent data)
 {
     foreach (var dir in data.ChangedDirectories)
     {
         var            dirInfo = new DirectoryInfo(dir.Path);
         FileAttributes attributes;
         if (FileAttributes.TryParse(dir.Attributes, true, out attributes))
         {
             dirInfo.Attributes = attributes;
         }
         else
         {
             throw new InvalidAttributesException(string.Format("Unable to parse attributes [{0}].", dir.Attributes));
         }
     }
 }
        public override Task ExecutePostProcessingAsync()
        {
            try
            {
                foreach (var fileData in FileData)
                {
                    var contentDisposition = fileData.Headers.ContentDisposition;

                    var filePath = Path.Combine(RootPath, contentDisposition.FileName.Trim('"'));

                    var fileTimeString   = contentDisposition.Parameters.FirstOrDefault(x => x.Name == "lastWriteTimeUtc");
                    var fileTimeLong     = Convert.ToInt64(fileTimeString.Value);
                    var lastWriteTimeUtc = DateTime.FromFileTime(fileTimeLong);

                    var attributes = contentDisposition.Parameters.FirstOrDefault(x => x.Name == "fileAttributes");

                    FileAttributes fileAttributes;
                    FileAttributes.TryParse(HttpUtility.UrlDecode(attributes.Value), true, out fileAttributes);

                    UpdateFileWithOriginalSettings(filePath, lastWriteTimeUtc, fileAttributes);
                }

                if (_postProcContentMarker > -1)
                {
                    var deleteJson = Contents[_postProcContentMarker];
                    var data       = deleteJson.ReadAsAsync <SyncPostProcContent>().Result;

                    if (data != null)
                    {
                        DeleteOrMoveFiles(data);
                        ChangeAttributesOnFolders(data);
                    }
                }
            }
            catch (Exception e)
            {
                SyncResult.Errors.Add(string.Format("Error: Could not complete post processing of files. {0}", e));
            }

            return(base.ExecutePostProcessingAsync());
        }
Ejemplo n.º 3
0
        public static void StreamToFile(string path, Stream requestStream, FileInfo file, long lastWriteTimeUtc, string fileAttributes)
        {
            var fileStream = File.Create(path);

            requestStream.CopyTo(fileStream);
            fileStream.Close();
            requestStream.Close();

            file.Refresh();
            var dateTime = DateTime.FromFileTime(lastWriteTimeUtc);

            FileAttributes attributes;

            if (!FileAttributes.TryParse(fileAttributes, true, out attributes))
            {
                throw new Exception("");
            }

            file.LastWriteTimeUtc = dateTime;
            file.Attributes       = attributes;
        }