/// <summary>get first file that is a match in the filesystem</summary> /// <param name="extensions">comma seperated string with extensions</param> /// <param name="colorInfo">null by default; will be wildcarded if null</param> /// <returns>false if no file exists for any passed-in extensions - extends the ImageTreeFile accordingly otherwise and returns true</returns> public bool ExtendToFirstExistingFile(string extensions, ColorInfo colorInfo = null) { //try //{ var itf = new ImageTreeFile(FullName); itf.Color = colorInfo ?? new ColorInfo("#0DEAD0"); itf.Ext = "*"; var searchPattern = colorInfo == null?itf.NameWithExtension.Replace("_0DEAD0", "*") : itf.NameWithExtension; string[] dirEntries = Directory.GetFileSystemEntries(Path, searchPattern); string[] extArray = extensions.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); if (extArray.Length > 0) { foreach (var dirEntry in dirEntries) { itf = new ImageTreeFile(dirEntry); foreach (string extension in extArray) { if (extension == itf.Ext) { Ext = extension; Color = itf.Color; if (ImageNumber == NoImageNumber) // BildInArbeit.tiff requested; BildInArbeit_01.tiff exists => take it { ImageNumber = new ImageTreeFile(dirEntry).ImageNumber; } return(true); } } } } //} //catch (DirectoryNotFoundException) { } //catch (FileNotFoundException) { } //catch (Exception) { } return(false); }
/// <summary> /// convert string representation into ImageFile representation /// </summary> /// <example>"c:/temp/kill/308024_01_200x300,4x4tile-17.tiff"</example> /// <remarks>new features /// + removes/replaces name prefixes for iphones and windows phones /// + removes blanks (-> caMelCase)</remarks> protected void Parse() { #region translate special phone and camera naming conventions - removed; RSB 20150705 Name = BlankToCamelCase( Name .Replace("_Film", "Film_") .Replace("(", "") .Replace(")", "")); if (Name.ToUpper().StartsWith("WP_20")) { Name = Name.Substring(5); } if (Name.ToLower().StartsWith("photo-")) { Name = DateTimeOffset.UtcNow.ToString("yyMMdd") + "_" + Name.Substring(6); } if (Name.ToLower().StartsWith("photo") || Name.ToLower().StartsWith("image")) { Name = DateTimeOffset.UtcNow.ToString("yyMMdd") + Name.Substring(5); } if (Name.ToUpper().StartsWith("IMG") || Name.ToUpper().StartsWith("_MG")) { Name = DateTimeOffset.UtcNow.ToString("yyMMdd") + Name.Substring(3); } if (Name.StartsWith("20") && Name.Length > 5 && Name.Substring(0, 5).Contains('-')) // assume: u: 2008-06-15 21.15.07Z { var fields = Name.Split(new char[] { '-', ' ', '.', ':' }); Name = (int.Parse(fields[0]) - 2000).ToString("D2") + fields[1] + fields[2] + fields[3] + "_" + fields[4] + fields[5]; } #endregion int j, k; var csvValues = base.Name.Split(new char[] { ',' }); #region Sku, Color, ImageNumber and NameExt var parts = csvValues[0].Split(new char[] { '_' }); j = parts.Length; imageNumber = NoImageNumber; Color = null; NameExt = string.Empty; if (j == 2) // Sku_Number or Sku_NameExt => Sku_Dye without Number is not allowed { if (char.IsLetter(parts[1][0])) { NameExt = parts[1]; } else { SetImageNumber(parts[1]); } } else if (j == 3) // Sku_Dye_Number or Sku_Number_NameExt { ColorInfo cInfo; if (parts[1].Length != 6 || (cInfo = new ColorInfo("#" + parts[1])).Color == System.Drawing.Color.Empty) // throws FormatException { SetImageNumber(parts[1]); NameExt = BlankToCamelCase(parts[2]); } else { Color = cInfo; SetImageNumber(parts[2]); NameExt = null; } } else if (j >= 4) // Sku_Dye_Number_NameExt or Sku_Number_NameExt_SomeOtherStuff { ColorInfo cInfo = null; bool correctLength = parts[1].Length == 6; if (correctLength) { cInfo = new ColorInfo("#" + parts[1]); } if (correctLength && cInfo.Color != System.Drawing.Color.Empty) { Color = cInfo; SetImageNumber(parts[2]); NameExt = BlankToCamelCase(parts[3]); } else { Color = null; SetImageNumber(parts[1]); NameExt = BlankToCamelCase(parts[2]);; } } Sku = parts[0]; // also sets topdir and subdir if called for a ImageTreeFile since property Sku is virtual #endregion #region TileTemplate if (csvValues.Length > 1) { tileTemplate = csvValues[1]; k = tileTemplate.IndexOf('-'); if (k >= 0) { string tileNumberString = tileTemplate.Substring(k + 1); #region only keep leading digits for tileNumberString int i = 0; int len = tileNumberString.Length; while (i < len && char.IsDigit(tileNumberString[i])) { i++; } if (i < len) { tileNumberString = tileNumberString.Remove(i); } #endregion tileNumber = tileNumberString; tileTemplate = tileTemplate.Substring(0, k); } else { tileNumber = string.Empty; } } #endregion }