Files
Umbraco-CMS/src/Umbraco.Core/Models/Css/FileUtility.cs
Morten@Thinkpad-X220 59c5a8920e Adds abstract File, Script, Stylesheet and Template model implementations for U4-933 U4-934 U4-935
Added a CssParser which is used internally by the Stylesheet class, but still needs a bit of work - primarily testing.
Resolves a couple of naming conflicts for Template.
2012-10-04 11:44:31 -02:00

71 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
namespace Umbraco.Core.Models.Css
{
internal class FileUtility
{
#region Constants
private static readonly char[] IllegalChars;
#endregion Constants
#region Init
static FileUtility()
{
var chars = new List<char>(Path.GetInvalidPathChars());
foreach (char ch in Path.GetInvalidFileNameChars())
{
if (!chars.Contains(ch) && ch != Path.DirectorySeparatorChar)
{
chars.Add(ch);
}
}
IllegalChars = chars.ToArray();
}
#endregion Init
#region Methods
/// <summary>
/// Makes sure directory exists and if file exists is not readonly.
/// </summary>
/// <param name="filename"></param>
/// <returns>if valid path</returns>
internal static bool PrepSavePath(string filename)
{
if (System.IO.File.Exists(filename))
{
// make sure not readonly
FileAttributes attributes = System.IO.File.GetAttributes(filename);
attributes &= ~FileAttributes.ReadOnly;
System.IO.File.SetAttributes(filename, attributes);
}
else
{
string dir = Path.GetDirectoryName(filename);
if (!String.IsNullOrEmpty(dir) && dir.IndexOfAny(IllegalChars) >= 0)
{
return false;
}
if (!String.IsNullOrEmpty(dir) && !Directory.Exists(dir))
{
// make sure path exists
Directory.CreateDirectory(dir);
}
string file = Path.GetFileName(filename);
if (!String.IsNullOrEmpty(file) && file.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
{
return false;
}
}
return true;
}
#endregion Methods
}
}