/// <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="directory">Returns <c>true</c> if the given path describes a directory, false if it is a file.</param> unsafe public void GetFileInfo(string path, out ulong size, out bool directory) { Dictionary <string, string> fi = GetFileInfo(path); size = fi.ContainsKey("st_size") ? System.UInt64.Parse(fi["st_size"]) : 0; bool SLink = false; directory = false; if (fi.ContainsKey("st_ifmt")) { switch (fi["st_ifmt"]) { case "S_IFDIR": directory = true; break; case "S_IFLNK": SLink = true; break; } } if (SLink) // test for symbolic directory link { void *hAFCDir = null; if (directory = (MobileDevice.AFCDirectoryOpen(hAFC, path, ref hAFCDir) == 0)) { MobileDevice.AFCDirectoryClose(hAFC, hAFCDir); } } }
/// <summary> /// Gets the names of subdirectories in a specified directory. /// </summary> /// <param name="path">The path for which an array of subdirectory names is returned.</param> /// <returns>An array of type <c>String</c> containing the names of subdirectories in <c>path</c>.</returns> unsafe public string[] GetDirectories(string path) { if (!IsConnected) { throw new Exception("Not connected to phone"); } void * hAFCDir = null; string full_path = FullPath(CurrentDirectory, path); //full_path = "/private"; // bug test int res = MobileDevice.AFCDirectoryOpen(hAFC, full_path, ref hAFCDir); if (res != 0) { throw new Exception("Path does not exist: " + res.ToString()); } string buffer = null; ArrayList paths = new ArrayList(); MobileDevice.AFCDirectoryRead(hAFC, hAFCDir, ref buffer); while (buffer != null) { if ((buffer != ".") && (buffer != "..") && IsDirectory(FullPath(full_path, buffer))) { paths.Add(buffer); } MobileDevice.AFCDirectoryRead(hAFC, hAFCDir, ref buffer); } MobileDevice.AFCDirectoryClose(hAFC, hAFCDir); return((string[])paths.ToArray(typeof(string))); }
/// <summary> /// Returns the names of files in a specified directory /// </summary> /// <param name="path">The directory from which to retrieve the files.</param> /// <returns>A <c>String</c> array of file names in the specified directory. Names are relative to the provided directory</returns> unsafe public string[] GetFiles(string path) { if (!IsConnected) { throw new Exception("Not connected to phone"); } string full_path = FullPath(CurrentDirectory, path); void *hAFCDir = null; if (MobileDevice.AFCDirectoryOpen(hAFC, full_path, ref hAFCDir) != 0) { throw new Exception("Path does not exist"); } string buffer = null; ArrayList paths = new ArrayList(); MobileDevice.AFCDirectoryRead(hAFC, hAFCDir, ref buffer); while (buffer != null) { if (!IsDirectory(FullPath(full_path, buffer))) { paths.Add(buffer); } MobileDevice.AFCDirectoryRead(hAFC, hAFCDir, ref buffer); } MobileDevice.AFCDirectoryClose(hAFC, hAFCDir); return((string[])paths.ToArray(typeof(string))); }