Beispiel #1
0
        /// <summary>
        /// Determines whether the given path refers to an existing file or directory on the phone.
        /// </summary>
        /// <param name="path">The path to test.</param>
        /// <returns><c>true</c> if path refers to an existing file or directory, otherwise <c>false</c>.</returns>
        public bool Exists(string path)
        {
            uint   data_size;
            IntPtr data;

            data = IntPtr.Zero;

            if (MobileDevice.AFCGetFileInfo(hAFC, path, ref data, out data_size) != 0)
            {
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// Returns the size and type of the specified file or directory.
        /// </summary>
        /// <param name="path">The file or directory for which to retrieve information.</param>
        /// <param name="size">Returns the size of the specified file or directory</param>
        /// <param name="fileType">Returns the size of the specified file or directory</param>
        public void GetFileInfoDetails(string path, out int size, out FileTypes fileType)
        {
            IntPtr data;
            IntPtr current_data;
            uint   data_size;
            uint   offset;
            string name;
            string value;
            int    ret;

            data = IntPtr.Zero;

            size     = 0;
            fileType = FileTypes.Unknown;
            ret      = MobileDevice.AFCGetFileInfo(hAFC, path, ref data, out data_size);
            if (ret != 0)
            {
                return;
            }

            offset = 0;
            while (offset < data_size)
            {
                current_data = new IntPtr(data.ToInt32() + offset);
                name         = Marshal.PtrToStringAnsi(current_data);
                offset      += (uint)name.Length + 1;

                current_data = new IntPtr(data.ToInt32() + offset);
                value        = Marshal.PtrToStringAnsi(current_data);
                offset      += (uint)value.Length + 1;
                switch (name)
                {
                case "st_size": size = Int32.Parse(value); break;

                case "st_blocks": break;

                case "st_ifmt":
                    //S_IFBLK  File (#rtl.baseunix.stat record) mode: Block device
                    //S_IFCHR  File (#rtl.baseunix.stat record) mode: Character device
                    //S_IFDIR  File (#rtl.baseunix.stat record) mode: Directory
                    //S_IFIFO  File (#rtl.baseunix.stat record) mode: FIFO
                    //S_IFLNK  File (#rtl.baseunix.stat record) mode: Link
                    //S_IFMT   File (#rtl.baseunix.stat record) mode: File type bit mask
                    //S_IFREG  File (#rtl.baseunix.stat record) mode: Regular file
                    //S_IFSOCK File (#rtl.baseunix.stat record) mode: Socket
                    switch (value)
                    {
                    case "S_IFDIR":
                        fileType = FileTypes.Folder;
                        break;

                    case "S_IFREG":
                        fileType = FileTypes.File;
                        break;

                    case "S_IFBLK":
                        fileType = FileTypes.BlockDevice;
                        break;

                    case "S_IFCHR":
                        fileType = FileTypes.CharDevice;
                        break;

                    case "S_IFIFO":
                        fileType = FileTypes.FIFO;
                        break;

                    case "S_IFLNK":
                        fileType = FileTypes.Link;
                        break;

                    case "S_IFMT":
                        fileType = FileTypes.FileMask;
                        break;

                    case "S_IFSOCK":
                        fileType = FileTypes.Socket;
                        break;
                    }
                    break;
                }
            }
        }