using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Collections; using System.Diagnostics; using static PageScraperLib.Utils.OutputUtils; namespace PageScraperLib.Utils { public class FileUtils { /* public static List<string> configKeys = new List<string>() { "url", "needle", "attrib1", "attrib2", "baseURI", "parentEl", "parentAttrib1", "parentAttrib2", "childEl", "childAttrib1", "childAttrib2" }; */ // FOLDERS public static bool CreateFolder(string path) { DirectoryInfo dir = Directory.CreateDirectory(path); return dir.Exists; } /// <summary> /// Reads text file to String List /// </summary> /// <param name="path"></param> /// <returns>List of strings</returns> // READ LINES public static List<string> OpenFileAndReadLinesToStringList(string path) { if (File.Exists(path)) { try { return new List<string>(File.ReadAllLines(path)); } catch (Exception e) { print(log($"Error occurred on File.ReadAllLines(path)..\n{e.Message}")); } } return null; } /// <summary> /// Reads text file to String List /// </summary> /// <param name="path"></param> /// <returns>List of strings</returns> public static StringBuilder OpenFileAndReadLinesToStringBuilder(string path) { List<string> lines; StringBuilder sb = new StringBuilder(); if (File.Exists(path)) { try { lines = new List<string>(File.ReadAllLines(path)); foreach (string line in lines) sb.AppendLine(line); return sb; } catch (Exception e) { print(log($"Error occurred on File.ReadAllLines(path)..\n{e.Message}")); } } else return null; return null; } /// <summary> /// Reads text file to String Array /// </summary> /// <param name="path"></param> /// <returns></returns> public static string[] OpenFileAndReadLinesToStringArray(string path) { if (File.Exists(path)) { try { return File.ReadAllLines(path); } catch (Exception e) { print(log($"Error occurred on File.ReadAllLines(path)..\n{e.Message}")); } } return null; } // String Tests /// <summary> /// Parses a string for starting string - with default = "#" /// </summary> /// <param name="line"></param> /// <returns>true if string starts-with expected string</returns> public static bool isLineComment(string line, string needle = "#") { return line.Trim().StartsWith(needle); } /// <summary> /// Parses a string for starting string - with default = "http" /// used to detect a url before attempting to navigate or download that resource /// </summary> /// <param name="line"></param> /// <param name="needle"></param> /// <returns></returns> public static bool isLineUrl(string line, string needle = "http") { return line.Trim().StartsWith(needle); } // OPEN FILE /// <summary> /// Reads text file to single string /// </summary> /// <param name="path"></param> /// <returns></returns> public static string OpenFileAndReadAllText(string path) { if (File.Exists(path)) { try { return File.ReadAllText(path); } catch (Exception e) { string message = "File exists, but there was an error opening it for reading!!!"; log(message); e.Data.Add("AppErrorMessage", message); throw; } } else { log("File does not exist, cannot open!!!"); throw new FileNotFoundException(); } } public static FileStream OpenFileAsFileStream(string path) { if (File.Exists(path)) { try { return File.OpenRead(path); } catch (Exception e) { string message = "File exists, but there was an error opening it for reading!!!"; log(message); e.Data.Add("AppErrorMessage", message); throw; } } else { log("File does not exist, cannot open!!!"); throw new FileNotFoundException(); } } // WRITE TEXT public static bool OpenFileAndWriteText(string path, string contents) { try { File.WriteAllText(path, contents); } catch (Exception e) { log("Error attempting to write text to file"); throw; } return File.Exists(path); } public static bool OpenFileAndWriteText(string path, StringBuilder contents) { OpenFileAndWriteText(path, contents.ToString()); return File.Exists(path); } public static bool OpenFileAndWriteText(string path, string[] contents) { StringBuilder sb = new StringBuilder(); foreach (string s in contents) { sb.AppendLine(s); } return OpenFileAndWriteText(path, sb); } public static bool OpenFileAndWriteText(string path, List<string> contents) { StringBuilder sb = new StringBuilder(); foreach (string s in contents) { sb.AppendLine(s); } OpenFileAndWriteText(path, sb); return File.Exists(path); } public static bool OpenFileAndWriteText(string path, Dictionary<string, string> contents, string separator = "=") { StringBuilder sb = new StringBuilder(); foreach (string s in contents.Keys) { sb.AppendLine($"{s}{separator}{contents[s]}"); } OpenFileAndWriteText(path, sb); return File.Exists(path); } public static bool WriteTextToFile(string path, string contents) { OpenFileAndWriteText(path, contents); return File.Exists(path); } /* public static Dictionary<string,string> ParseConfigFileToDictionary(string path) { string filetext = OpenFileAndReadAllText(path); ArrayList textar= new ArrayList( filetext.Split(Environment.NewLine.ToString())); string value; Tuple<string, string> entry; Dictionary<string, string> dict = new Dictionary<string, string>(); foreach ( string s in textar) { log(s); entry = SplitConfigEntry(s); if ( entry != null) { value = GetValueFromKey(entry); if ( value != null && value.Length > 0 ) { dict.Add(entry.Item1, entry.Item2); } } } log($"DictionaryLength: {dict.Count}"); return dict; } public static Tuple<string,string> SplitConfigEntry(string entry) { if (entry.Contains("=")) { var result = entry.Split('='); return new Tuple<string,string>(result[0], result[1]); } else { return null; } } public static string GetValueFromKey(Tuple<string, string> kv) { if ( configKeys.Contains(kv.Item1)) { return kv.Item2; } else { return null; } } */ #region FILE LISTS & SORTING public static string GetStringListToString(List<string> stringlist) { StringBuilder sb = new StringBuilder(); log("GetStringListToString::List: START"); int count = 0; foreach (string s in stringlist) { sb.AppendLine(s); log($"Item{++count}: {s}"); } log("GetStringListToString::List: END"); return sb.ToString(); } public static List<string> ListFilesToListString(string path, string searchPattern) { List<string> list = list = new List<string>(Directory.EnumerateFiles(path)); list.Sort(); PrintListString(list); list.Reverse(); PrintListString(list); return list; } public static List<FileInfo> ListFilesToListFileInfo(string path, string searchPattern) { List<FileInfo> files = new List<FileInfo>((FileInfo[])ListFilesToArrayFileInfo(path, searchPattern)); log($"ListFilesToListFileInfo::Found [{files.Count}] Files..."); return new List<FileInfo>(files); } public static Array ListFilesToArrayFileInfo(string path, string searchPattern) { Array files = new DirectoryInfo(path).GetFiles(searchPattern); log($"ListFilesToArrayFileInfo::Found [{files.Length}] Files..."); return files; } public static void SortFilesByLastWriteTime(ref FileInfo[] files) { Array.Sort(files, delegate (FileInfo file1, FileInfo file2) { return file1.LastWriteTime.CompareTo(file2.LastWriteTime); }); } public static void SortFilesByLastWriteTimeDesc(ref FileInfo[] files) { Array.Sort(files, delegate (FileInfo file1, FileInfo file2) { return file2.LastWriteTime.CompareTo(file1.LastWriteTime); }); } public static List<FileInfo> SortFilesByLastWriteTimeAsc(ref FileInfo[] files) { Array.Sort(files, CompareFilesByLastWriteTimeAsc); return new List<FileInfo>(files); } public static int CompareFilesByLastWriteTimeAsc(FileInfo file1, FileInfo file2) { return file1.LastWriteTime.CompareTo(file2.LastWriteTime); } //parts.Sort(delegate (Part x, Part y) //{ // if (x.PartName == null && y.PartName == null) return 0; // else if (x.PartName == null) return -1; // else if (y.PartName == null) return 1; // else return x.PartName.CompareTo(y.PartName); //}); #endregion } }
- Log in to post comments
Tags