public string basename()
{
string n = this.name();
int dot = n.LastIndexOf('.');
if (dot < 2)
{
if (dot < 0) return n;
if (n == ".") return n;
if (n == "..") return n;
}
return n.Substring(0, dot);
}