-
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.
|
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
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
.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
|
|
|
|
|
|
|