Example #1
0
        public IAbsolutePath ResolveAbsolutePath(string nativePath)
        {
            try
            {
                var absPath = Path.IsPathRooted(nativePath)
                                        ? nativePath
                                        : Path.GetFullPath(nativePath);

                var isDirectory = Directory.Exists(nativePath);

                return(isDirectory
                                        ? (IAbsolutePath)AbsoluteDirectoryPath.Parse(absPath)
                                        : (IAbsolutePath)AbsoluteFilePath.Parse(absPath));
            }
            catch (ArgumentException e)
            {
                throw new InvalidPath(nativePath, e);
            }
            catch (NotSupportedException e)
            {
                throw new InvalidPath(nativePath, e);
            }
            catch (PathTooLongException e)
            {
                throw new InvalidPath(nativePath, e);
            }
        }
Example #2
0
 public static AbsoluteFilePath GetCodeBaseFilePath(this Assembly assembly)
 {
     if (Platform.OperatingSystem == OS.Windows)
     {
         return(AbsoluteFilePath.Parse(assembly.CodeBase.StripPrefix("file:///")));
     }
     else
     {
         return(AbsoluteFilePath.Parse(assembly.CodeBase.StripPrefix("file://")));
     }
 }
Example #3
0
        void ReplaceAllDescendantPermissionsFromObject(
            DirectoryInfo dInfo,
            DirectorySecurity dSecurity,
            FileSystemPermission fileSystemPermission,
            FileSystemGroup group)
        {
            dInfo.SetAccessControl(dSecurity);

            foreach (FileInfo fi in dInfo.GetFiles())
            {
                SetPermission(AbsoluteFilePath.Parse(fi.FullName), fileSystemPermission, group);
            }

            dInfo.GetDirectories().ToList()
            .ForEach(d => ReplaceAllDescendantPermissionsFromObject(d, dSecurity, fileSystemPermission, group));
        }
Example #4
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (objectType == typeof(AbsoluteFilePath))
     {
         return(AbsoluteFilePath.Parse((string)reader.Value));
     }
     if (objectType == typeof(RelativeFilePath))
     {
         return(RelativeFilePath.Parse((string)reader.Value));
     }
     if (objectType == typeof(AbsoluteDirectoryPath))
     {
         return(AbsoluteDirectoryPath.Parse((string)reader.Value));
     }
     if (objectType == typeof(RelativeDirectoryPath))
     {
         return(RelativeDirectoryPath.Parse((string)reader.Value));
     }
     throw new ArgumentException("The type '" + objectType.FullName + "' was not recognized by this converter");
 }
Example #5
0
        public IObservable <FileSystemEventData> Watch(AbsoluteDirectoryPath path, Optional <string> filter = default(Optional <string>))
        {
            return(Observable.Create <FileSystemEventData>(observer =>
            {
                if (!Exists(path))
                {
                    observer.OnError(new FileNotFoundException("Directory not found", path.ContainingDirectory.NativePath));
                    return Disposable.Empty;
                }

                var fsw = filter.Select(f => new FileSystemWatcher(path.NativePath, f)).Or(new FileSystemWatcher(path.NativePath));
                fsw.IncludeSubdirectories = false;
                fsw.NotifyFilter = NotifyFilters.CreationTime
                                   | NotifyFilters.FileName
                                   | NotifyFilters.LastWrite
                                   | NotifyFilters.Size;

                var garbage = Disposable.Combine(
                    fsw,
                    Observable.FromEventPattern <ErrorEventArgs>(fsw, "Error")
                    .Subscribe(_ => observer.OnError(_.EventArgs.GetException())),
                    Observable.FromEventPattern <FileSystemEventArgs>(fsw, "Changed")
                    .Subscribe(e => observer.OnNext(new FileSystemEventData(AbsoluteFilePath.Parse(e.EventArgs.FullPath), FileSystemEvent.Changed))),
                    Observable.FromEventPattern <FileSystemEventArgs>(fsw, "Created")
                    .Subscribe(e => observer.OnNext(new FileSystemEventData(AbsoluteFilePath.Parse(e.EventArgs.FullPath), FileSystemEvent.Created))),
                    Observable.FromEventPattern <RenamedEventArgs>(fsw, "Renamed")
                    .Subscribe(e =>
                {
                    observer.OnNext(new FileSystemEventData(
                                        AbsoluteFilePath.Parse(e.EventArgs.FullPath),
                                        FileSystemEvent.Renamed,
                                        AbsoluteFilePath.Parse(e.EventArgs.OldFullPath)));
                }),
                    Observable.FromEventPattern <FileSystemEventArgs>(fsw, "Deleted")
                    .Subscribe(e => observer.OnNext(new FileSystemEventData(AbsoluteFilePath.Parse(e.EventArgs.FullPath), FileSystemEvent.Removed))));

                fsw.EnableRaisingEvents = true;

                return garbage;
            }));
        }
Example #6
0
        public void SetPermission(
            AbsoluteDirectoryPath dir,
            FileSystemPermission permission,
            FileSystemGroup group,
            bool recursive)
        {
            var permissionBits = GetPermissionBits(permission, group);

            Syscall.chmod(dir.NativePath, (FilePermissions)permissionBits);

            if (recursive)
            {
                foreach (var file in Directory.GetFiles(dir.NativePath))
                {
                    var filePermission = (int)permission & ~(int)FileSystemPermission.Execute;
                    SetPermission(AbsoluteFilePath.Parse(file), (FileSystemPermission)filePermission, group);
                }

                foreach (var directory in Directory.GetDirectories(dir.NativePath))
                {
                    SetPermission(AbsoluteDirectoryPath.Parse(directory), permission, group, recursive);
                }
            }
        }
Example #7
0
 public static AbsoluteFilePath ToAbsoluteFilePath(this Uri uri)
 {
     return(AbsoluteFilePath.Parse(Uri.UnescapeDataString(uri.AbsolutePath)));
 }
Example #8
0
 /// <exception cref="System.IO.IOException" />
 public static AbsoluteFilePath CreateTempFile()
 {
     return(AbsoluteFilePath.Parse(Path.GetTempFileName()));
 }
Example #9
0
 public static IFilePath Parse(string relativeOrAbsolutePath)
 {
     return(Path.IsPathRooted(relativeOrAbsolutePath)
                         ? (IFilePath)AbsoluteFilePath.Parse(relativeOrAbsolutePath)
                         : (IFilePath)RelativeFilePath.Parse(relativeOrAbsolutePath));
 }