.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

Der Operator ??

13.11.06 - .NET, Base Framework
Beitrag von Norbert Eder
 Als ich die Überschrift des Beitrages Der Operator ?? in C# von Thomas Woelfer gelesen habe, dachte ich mir zuerst einfach nur: Häh?.

Nachdem ich allerdings bei den Vorbereitungen zu einer Zertifizierung genau über diese Frage gestolpert bin, sage ich auf diesem Weg einfach mal Danke ;-) Ist ausserdem ganz nett zu verwenden.

Hier das Beispiel von Thomas, ich hoffe er ist mir nicht böse, dass ich es einfach so mal verwende:

void foo( string v)
{
string r = ( v == null ) ? "null" : v;
}

Variante mit dem ??-Operator:

void foo( string v)
{
string r = v ?? "null";
}


  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Lese- und Schreibrechte einer Datei überprüfen

12.11.06 - .NET, Base Framework
Beitrag von Norbert Eder
 Kaum ein Entwickler überprüft bei Dateizugriffe, ob der aktuell angemeldete User auch tatsächlich über die entsprechenden Rechte verfügt. Hintergrund ist wohl, dass die meisten User mit einem Administrator-Account (was zumindest Windows betrifft) angemeldet sind. Hier eine einfache Möglichkeit, die Lese- bzw. Schreibrechte einer Datei abzufragen:

public class FileRightsReader
{
public static bool IsReadable(string filename)
{
WindowsIdentity principal = WindowsIdentity.GetCurrent();
if (File.Exists(filename))
{
FileInfo fi = new FileInfo(filename);
AuthorizationRuleCollection acl = fi.GetAccessControl().GetAccessRules(true, true, typeof(SecurityIdentifier));
for (int i = 0; i < acl.Count; i++)
{
System.Security.AccessControl.FileSystemAccessRule rule =
(System.Security.AccessControl.FileSystemAccessRule)acl;
if (principal.User.Equals(rule.IdentityReference))
{
if (System.Security.AccessControl.AccessControlType.Deny.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Read) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Read))
return false;
}
else if (System.Security.AccessControl.AccessControlType.Allow.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Read) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Read))
return true;
}
}
}
}
else
{
return false;
}
return false;
}

public static bool IsWriteable(string filename)
{
WindowsIdentity principal = WindowsIdentity.GetCurrent();
if (File.Exists(filename))
{
FileInfo fi = new FileInfo(filename);
if (fi.IsReadOnly)
return false;

AuthorizationRuleCollection acl = fi.GetAccessControl().GetAccessRules(true, true, typeof(SecurityIdentifier));
for (int i = 0; i < acl.Count; i++)
{
System.Security.AccessControl.FileSystemAccessRule rule = (System.Security.AccessControl.FileSystemAccessRule)acl;
if (principal.User.Equals(rule.IdentityReference))
{
if (System.Security.AccessControl.AccessControlType.Deny.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Write) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Write))
return false;
}
else if (System.Security.AccessControl.AccessControlType.Allow.Equals
(rule.AccessControlType))
{
if ((((int)FileSystemRights.Write) & (int)rule.FileSystemRights) == (int)(FileSystemRights.Write))
return true;
}
}
}

}
else
{
return false;
}
return false;
}

}

  6 Kommentare - 1228 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Mit Dateizugriffs-Rechten arbeiten

12.11.06 - .NET, Base Framework
Beitrag von Norbert Eder
 In einigen Fällen muss mit den Dateizugriffs-Rechten gearbeitet werden. So mmuss die ACL (Access Control List) ausgelesen und angepasst werden. Hier ein Code-Snippet, welches den Umgang mit den entsprechenden Klassen aus dem .NET Framework 2.0 zeigt. Kurze Beschreibungen gibt es als Code-Comment.

// Creating a testfile
Console.WriteLine("Creating XML File");

XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("root");
doc.AppendChild(root);
doc.Save(@"C:\temptest.xml");

Console.WriteLine("Getting FileSecurity");

// Getting Access Control List (ACL) of the file
FileSecurity fSec = File.GetAccessControl(@"C:\temptest.xml");

// Get Access Right Type
Type accessRightType = fSec.AccessRightType;
Console.WriteLine("AccessRightType: " + accessRightType.FullName);

// Get Owner of the file
string fileOwner = fSec.GetOwner(typeof(System.Security.Principal.NTAccount)).Value;
Console.WriteLine("Owner: " + fileOwner + System.Environment.NewLine);

// Get Access Rules of the file
AuthorizationRuleCollection authRuleColl =
fSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

// Iterate through all Access Rules
foreach (FileSystemAccessRule rule in authRuleColl)
{
Console.WriteLine("Control Type : " + rule.AccessControlType.ToString());
Console.WriteLine("Identity : " + rule.IdentityReference.Value);
Console.WriteLine("Inheritance Flags: " + rule.InheritanceFlags.ToString());
Console.WriteLine("Is Inherited : " + rule.IsInherited.ToString());
Console.WriteLine("Propagation Flags: " + rule.PropagationFlags.ToString());
Console.WriteLine("File System Right: " + rule.FileSystemRights.ToString());
Console.WriteLine(System.Environment.NewLine);
}

Console.WriteLine("Adding new Rule");

// Adding a new rule to the file's Access Control List
fSec.AddAccessRule(new
System.Security.AccessControl.FileSystemAccessRule(
System.Security.Principal.WindowsIdentity.GetCurrent().Name,
System.Security.AccessControl.FileSystemRights.Read &
System.Security.AccessControl.FileSystemRights.Write,
System.Security.AccessControl.AccessControlType.Allow));

Console.WriteLine("Setting nun FileSecurity");

// Save Access Control List
File.SetAccessControl(@"C:\temptest.xml", fSec);

Console.ReadKey(false);


  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Entscheidung: IE7 vs. Firefox 2

10.11.06 - Internet
Beitrag von Norbert Eder
 So, nach langem Hin und Her ist nun endlich die Entscheidung gefallen.

Nutzen werde ich in Zukunft den Firefox 2.0. Warum? Nun das läßt sich in einigen Worten zusammenfassen:

1. Beim Öffnen neuer Tabs ist der Firefox wesentlich schneller. Wartezeiten von einigen Sekunden beim IE7 sind hier für mich einfach zu lange. Nicht dass ich die Zeit nicht hätte, aber es stört einfach den Arbeitsfluss.

2. Speicherverbrauch. Nun ist ja der Firefox eigentlich nicht der Browser, der gerade wenig Speicher verbraucht, aber bei der gleichen Anzahl an Tabs (mit den gleichen Webseiten) verbraucht er doch weniger Speicher als der IE7. Hätte ich zwar nicht gedacht, aber scheint wirklich so zu sein.

3. Konfiguration/Customization: Der Firefox ist einfach besser anpassbar an die eigenen Wünsche. Add-Ins für den IE7 sind zwar verfügbar, oft aber nur gegen Bares. In diesem Sektor einfach nicht tragbar. Nicht für mich.

Von anderen Punkten sehe ich jetzt einfach ab (diverse Abstürze auf einem frischen System), erwähne diese nicht weiter. Der IE7 hat Potential, keine Frage, aber effiziente Weiterentwicklung ist gefragt, sonst wird der Firefox endgültig Oberhand gewinnen.

  1 Kommentar - 536 mal angesehen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Nachtrag: Mono 1.2

10.11.06 - Base Framework, Tools, 3rd Party Tools
Beitrag von Norbert Eder
  Dass Mono 1.2 am versprochenen Tag veröffentlicht wurde, haben ja sicherlich die meisten mitbekommen. Hier nochmal die wichtigsten Links:

- Download Mono 1.2
- Release Notes
- Mono Weblog
- Mono Documentation

  Kommentar hinzufügen - 2 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Grafische Hilfe benötigt ...

10.11.06 - Tools, SPF
Beitrag von Norbert Eder
 Vielleicht eine ungewöhnliche Post, aber dennoch versuche ich über das Medium Blog mein Glück. Für mein aktuelles Projekt Settings Persistence Framework benötige ich noch ein kleines, nettes Logo. Da ich nun als Programmierer an grafischer Kreativität mangelt, hier einfach die Frage ob sich einer meiner Blog-Leser aufraffen könnte, mich hier zu unterstützen.

Sollte dem so sein, würde ich um Kontaktaufnahme bitten, damit wir Details (Was stelle ich mir vor?, Welche Gegenleistung ist erwünscht?, etc.) besprechen können. Ich bitte dringendst darum, mit mir vorher darüber zu sprechen, da ich nicht will, dass ich eventuell jemand umsonst eine Menge Arbeit antut.

Schon jetzt ein kräftiges Danke an meine Leser.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


CODEPLEX: Dynamic Property Saver nennt sich nun Settings Persistence Framework

10.11.06 - Base Framework, Tools, SPF
Beitrag von Norbert Eder
 Unter dem neuen Namen Settings Persistence Framework ist das Dynamic Property Saver Beispiel nun auf CodePlex [1] zu finden. Es wurden einige Änderungen durchgeführt, die in Kürze auch näher beschrieben werden. Derzeit wird die Projektseite eingerichtet und mit den notwendigen Informationen befüllt. Documentation und Online-Sourcecode folgen demnächst.

Für Erweiterungswünsche bzw. Input in jeglicher Form (auch Mitarbeit, wenn jemand will) bin ich natürlich jederzeit offen.

[1] CodePlex: Settings Persistence Framework

PS: Alle hier verknüpften Downloads wurden entfernt. Die Releases werden nur mehr auf CodePlex veröffentlich.
  3 Kommentare - 689 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Mono 1.2 wird für den heutigen Tag erwartet

09.11.06 - Base Framework
Beitrag von Norbert Eder
  Laut einer Meldung von Golem, welche sich Microsofts Entwicklermesse TechEd in Barcelona bezieht, sollte Mono 1.2 im Laufe des Tages erscheinen.

Mono 1.2 soll eine Unterstützung für Windows Forms mitbringen, wodurch eine Portierung erleichtert werden soll.

Für Mono-Interessierte empfiehlt es sich, heute des öfteren auf die Projekt Website zu sehen.

  Kommentar hinzufügen - 2 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Windows Live Writer Blog

09.11.06 - Community, Internet
Beitrag von Norbert Eder
 Wer sich über den Windows Live Writer informieren möchte, über neue Plugins, Hilfestellungen und das auch noch auf deutsch, dem sei an dieser Stelle das Windows Live Writer Blog zu empfehlen. Einfach mal reinschaun.

  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


.NET Serialisierung und Versionierung

09.11.06 - .NET, Base Framework
Beitrag von Norbert Eder
 Bei Verwendung der .NET Serialisierung stellt sich bei einer Änderung von zu serialisierenden Objekten oft die Frage, wie diese auf der Gegenseite behandelt werden. Um Probleme beim Deserialisieren auf der Gegenseite zu vermeiden, können die zusätzlichen Eigenschaften mit unterschiedlichen Attributen versehen werden, um dieser Falle Herr zu werden.

Hier die einzelnen Attribute und welche Bedeutung ihnen zukommt:

[NonSerialized()]
Dieses Attribut gibt an, dass die entsprechende Eigenschaft nicht serialisiert wird.

[OptionalField]
Damit wird die entsprechende Eigenschaft als optional gekennzeichnet. Sendet nun beispielsweise eine ältere Anwendungsversion das Objekt serialisiert zu einer neueren Version, wird das Fehlen der Eigenschaft einfach ignoriert.

[OnDeserializing]
Dieses Attribut wird nicht bei Eigenschaften gesetzt, sondern nur bei einer Methode - und zwar bei ausschließlich einer Methode pro Klasse. Dies wird hauptsächlich für Versionierungszwecken getan. Die Damit gekennzeichnete Methode hat nun die Möglichkeit in den Serialisierungsprozess einzugreifen und die fehlenden Werte zu setzen.

Weitere Informationen und auch Beispiele zu diesen Attributen können durch den MSDN Artikel Version Tolerant Serialization bezogen werden.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter