/// <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); }
/// <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; } } }