Exemplo n.º 1
0
        public UnixFileSystemInfo GetUnixFileInfo(string path)
        {
            File  file  = GetFile(path);
            Inode inode = file.Inode;

            UnixFileType fileType = (UnixFileType)((inode.Mode >> 12) & 0xff);

            uint deviceId = 0;

            if (fileType == UnixFileType.Character || fileType == UnixFileType.Block)
            {
                if (inode.DirectBlocks[0] != 0)
                {
                    deviceId = inode.DirectBlocks[0];
                }
                else
                {
                    deviceId = inode.DirectBlocks[1];
                }
            }

            return(new UnixFileSystemInfo
            {
                FileType = fileType,
                Permissions = (UnixFilePermissions)(inode.Mode & 0xfff),
                UserId = (inode.UserIdHigh << 16) | inode.UserIdLow,
                GroupId = (inode.GroupIdHigh << 16) | inode.GroupIdLow,
                Inode = file.InodeNumber,
                LinkCount = inode.LinksCount,
                DeviceId = deviceId
            });
        }
Exemplo n.º 2
0
        public static FileAttributes FileAttributesFromUnixFileType(UnixFileType fileType)
        {
            switch (fileType)
            {
            case UnixFileType.Fifo:
                return(FileAttributes.Device | FileAttributes.System);

            case UnixFileType.Character:
                return(FileAttributes.Device | FileAttributes.System);

            case UnixFileType.Directory:
                return(FileAttributes.Directory);

            case UnixFileType.Block:
                return(FileAttributes.Device | FileAttributes.System);

            case UnixFileType.Regular:
                return(FileAttributes.Normal);

            case UnixFileType.Link:
                return(FileAttributes.ReparsePoint);

            case UnixFileType.Socket:
                return(FileAttributes.Device | FileAttributes.System);

            default:
                return(0);
            }
        }
Exemplo n.º 3
0
        public static FileType GetFileType(string path, bool followSymLinks)
        {
#if WIN32
            // TODO : test me, is it working?
            System.IO.FileAttributes attr = System.IO.File.GetAttributes(path);
            return((attr & System.IO.FileAttributes.Directory) != 0 ? FileType.Directory : FileType.RegularFile);
#else
            Mono.Unix.Native.Stat stat;
            if (followSymLinks)
            {
                stat = UnixFileHelper.GetStat(path);
            }
            else
            {
                stat = UnixFileHelper.GetLStat(path);
            }

            FileType     ft;
            UnixFileType uft = UnixFileHelper.GetFileType(stat);
            switch (uft)
            {
            case UnixFileType.Directory:
                ft = FileType.Directory;
                break;

            case UnixFileType.CharacterDevice:
                ft = FileType.CharacterDevice;
                break;

            case UnixFileType.BlockDevice:
                ft = FileType.BlockDevice;
                break;

            case UnixFileType.RegularFile:
                ft = FileType.RegularFile;
                break;

            case UnixFileType.Fifo:
                ft = FileType.Fifo;
                break;

            case UnixFileType.SymbolicLink:
                ft = FileType.SymbolicLink;
                break;

            case UnixFileType.Socket:
                ft = FileType.Socket;
                break;

            default:
                throw new NotImplementedException(string.Format("UnixFileType {0} has no equivalent FileType value yet", uft.ToString()));
            }
            return(ft);
#endif
        }