Original von talla
Genau das wars doch was ich gesagt hatte 🙂
er hats aber anschaulicher dargestellt
das steht in der dll:
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
public class Class1 : IClass1
{
void IClass1.test(string s)
{
Console.WriteLine(s + " ist toll");
}
}
interface IClass1
{
void test(string s);
}
}
das im prog:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly asm = Assembly.LoadFrom("ClassLibrary1.dll");
IClass1 test = (IClass1)asm.CreateInstance("ClassLibrary1.Class1");
}
interface IClass1
{
void test(string s);
}
}
}
keine compilefehler
da ich keine ahnung von interfacen hab frag ich mich das auch
Der Typ- oder Namespacename "Class1" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?)
war ja auch klar da das haup prog die dll ja erst zur laufzeit bekommt
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
public class Class1 : IClass1
{
void IClass1.test(string s)
{
Console.WriteLine(s + " ist toll");
}
}
interface IClass1
{
void test(string s);
}
}
selber fehler
ich hab extra son einfaches beispiel gemacht damit mans mir daran erklären kann.
hi
ich will eine .net dll zur laufzeit laden
so wie plugins
Die Dll:
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
public class Class1
{
public void test(string s)
{
Console.WriteLine(s + " ist toll");
}
}
}
Die Konsole:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly asm = Assembly.LoadFrom("ClassLibrary1.dll");
IClass1 test = (IClass1)asm.CreateInstance("ClassLibrary1.Class1");
}
interface IClass1
{
void test(string s);
}
}
}
ich bekomm nen abbruch dass die class1 nicht in IClass1 umgewandelt werden kann
ich hab auch schon hier im forum rumgesucht aber verstanden wie das jetzt gehen soll hab ichs nicht richtig
Original von -acid-
ZiMD die wird dann bestimmt nicht "riesig" 😉<settings>
<wert1>value1</wert1>
<wert2>value2</wert2>
</settings>Wir bewegen uns hier im Bytebereich. Aber trotzdem: Manchmal gibts noch sinvolle Einsatzgebiete für Inis.
ich hatte jetzt eher an die monster xmls gedacht die mir vs erstellt
Original von -acid-
Also bei mir bringt er einen Fehler bei "reg2" -> parsing "[=][(?<abschnitt>([^]]))][^=]*$" - Too many )'s.Frage: Darf man GetChapter-Methode mit der entsprechenden Structure weiterbenutzen? 🙂
es muss ja auch so heißen:
Regex reg2 = new Regex(@"[=][(?<abschnitt>([^]]))][^=]*$");
der c# code hier im forum löscht die \ zeichen
gut dann hier noch eine überarbeitete version
ich hab auch noch die rückgabe beim get geändert
using System;
using System.Text.RegularExpressions;
namespace System
{
namespace IO
{
public class IniReader
{
private inidatei[] inizeilen;
private string datei = "";
public IniReader(string file)
{
datei = file;
string abschnitt = "";
string[] iniread = File.ReadAllLines(file);
inizeilen = new inidatei[iniread.Length];
Regex reg1 = new Regex(@"^(?<befehl>([^=])+)=(?<wert>([^=#])+)(#(?<kommentar>.*))?$");
Regex reg2 = new Regex(@"^[^=]*\[(?<abschnitt>([^\]]*))\][^=]*$");
for (int i = 0; i < inizeilen.Length; i++)
{
Match m1 = reg1.Match(iniread[i]);
Match m2 = reg2.Match(iniread[i]);
if (m1.Success)
{
inizeilen[i].befehl = m1.Groups["befehl"].Value.Trim();
inizeilen[i].wert = m1.Groups["wert"].Value.Trim();
inizeilen[i].kommentar = m1.Groups["kommentar"].Value.Trim();
inizeilen[i].abschnitt = abschnitt;
inizeilen[i].text = "";
}
else
{
if (m2.Success)
{
abschnitt = m2.Groups["abschnitt"].Value.Trim();
}
inizeilen[i].befehl = "";
inizeilen[i].wert = "";
inizeilen[i].kommentar = "";
inizeilen[i].abschnitt = "";
inizeilen[i].text = iniread[i];
}
}
}
private struct inidatei
{
public string befehl;
public string wert;
public string kommentar;
public string abschnitt;
public string text;
}
public struct Return
{
public string Command;
public string Value;
public string Comment;
public string Chapter;
}
public Return Get(string befehl)
{
Return rueckgabe = new Return();
rueckgabe.Command = befehl;
rueckgabe.Value = "";
rueckgabe.Comment = "";
foreach (inidatei i in inizeilen)
{
if (i.befehl == befehl)
{
rueckgabe.Value = i.wert;
rueckgabe.Comment = i.kommentar;
rueckgabe.Chapter = i.abschnitt;
}
}
return rueckgabe;
}
public Return[] GetChapter(string chapter)
{
Return[] rueckgabe = new Return[0];
foreach (inidatei i in inizeilen)
{
if (i.abschnitt == chapter)
{
Array.Resize(ref rueckgabe, rueckgabe.Length + 1);
rueckgabe[rueckgabe.Length - 1].Chapter = chapter;
rueckgabe[rueckgabe.Length - 1].Command = i.befehl;
rueckgabe[rueckgabe.Length - 1].Comment = i.kommentar;
rueckgabe[rueckgabe.Length - 1].Value = i.wert;
}
}
return rueckgabe;
}
public bool Set(string befehl, string wert)
{
bool success = false;
for (int i = 0; i < inizeilen.Length; i++)
{
if (inizeilen[i].befehl == befehl)
{
inizeilen[i].wert = wert;
success = true;
}
}
if (!success)
{
return success;
}
StreamWriter writer = new StreamWriter(datei);
for(int i = 0; i < inizeilen.Length; i++)
{
if (!String.IsNullOrEmpty(inizeilen[i].befehl))
{
writer.Write(inizeilen[i].befehl + "=" + inizeilen[i].wert);
if (!String.IsNullOrEmpty(inizeilen[i].kommentar)) writer.Write(" #" + inizeilen[i].kommentar);
if(i != (inizeilen.Length - 1))
{
writer.WriteLine();
}
}
else
{
writer.Write(inizeilen[i].text);
if(i != (inizeilen.Length - 1))
{
writer.WriteLine();
}
}
}
writer.Close();
return success;
}
}
}
}
Original von Vellas
Du könntest eventuell noch Kommentare mit aufnehmen in deinem regulären Ausdruck. Habe sowas auch mal in C++ geschrieben (wo es leider keine RegEx gibt, aber trotzdem danke für den RegEx, werde mir glaube ich mal Boost zulegen und das damit machen) und Kommentare rausgefiltert, die mit # eingeleitet werden.
ok sind drin
Original von Vellas
Außerdem gibt es bei mir neben Key=Value noch Chapters was sicher auch interessant wäre.
Beispiel:
[chapter]
key=value #comment
ja aber wofür kann man die gebrauchen?
ich dachte immer die dienen nur beim ändern im notepad zur orientierung
Original von Vellas
Evtl. könnte man die Klasse auch zu einem Template (Generic) umwandeln (für Vorschläge für sowas, wäre ich jederzeit offen, egal ob in C# oder sonst was smile
wenn du mir sagst wie 😜
Original von Lynix
Wenn man das Rad aber unbedingt neu erfinden will, dann sieht Dein Vorschlag super aus 🙂
Danke 😁
Original von norman_timo
Aber damals hatten auch INI Dateien ihre Berechtigung, und würd sie trotzdem nur für Settings benutzen.
Dafür sind sie gedacht 🙂
der neue code:
using System;
using System.Text.RegularExpressions;
namespace System
{
namespace IO
{
public class IniReader
{
private inidatei[] inizeilen;
private string datei = "";
public IniReader(string file)
{
datei = file;
string[] iniread = File.ReadAllLines(file);
inizeilen = new inidatei[iniread.Length];
Regex reg = new Regex(@"^(?<befehl>([^=])+)=(?<wert>([^=#])+)(#(?<kommentar>.*))?$");
for (int i = 0; i < inizeilen.Length; i++)
{
Match m = reg.Match(iniread[i]);
if (m.Success)
{
inizeilen[i].befehl = m.Groups["befehl"].Value.Trim();
inizeilen[i].wert = m.Groups["wert"].Value.Trim();
inizeilen[i].kommentar = m.Groups["kommentar"].Value.Trim();
inizeilen[i].text = "";
}
else
{
inizeilen[i].befehl = "";
inizeilen[i].wert = "";
inizeilen[i].kommentar = "";
inizeilen[i].text = iniread[i];
}
}
}
private struct inidatei
{
public string befehl;
public string wert;
public string kommentar;
public string text;
}
public string[] Get(string befehl)
{
string[] returnstring = new string[2];
returnstring[0] = "";
returnstring[1] = "";
foreach (inidatei i in inizeilen)
{
if (i.befehl == befehl)
{
returnstring[0] = i.wert;
returnstring[1] = i.kommentar;
}
}
return returnstring;
}
public bool Set(string befehl, string wert)
{
bool success = false;
for (int i = 0; i < inizeilen.Length; i++)
{
if (inizeilen[i].befehl == befehl)
{
inizeilen[i].wert = wert;
success = true;
}
}
if (!success)
{
return success;
}
StreamWriter writer = new StreamWriter(datei);
for(int i = 0; i < inizeilen.Length; i++)
{
if (!String.IsNullOrEmpty(inizeilen[i].befehl))
{
writer.Write(inizeilen[i].befehl + "=" + inizeilen[i].wert);
if (!String.IsNullOrEmpty(inizeilen[i].kommentar)) writer.Write(" #" + inizeilen[i].kommentar);
if(i != (inizeilen.Length - 1))
{
writer.WriteLine();
}
}
else
{
writer.Write(inizeilen[i].text);
if(i != (inizeilen.Length - 1))
{
writer.WriteLine();
}
}
}
writer.Close();
return success;
}
}
}
}
das mit dem array als rückgabe bei der get funktion gefällt mir nicht so
Regex reg = new Regex(@"(?<befehl>([=])+)=(?<wert>([^=#])+)(#(?<kommentar>.*))?$");
ich habs noch ein wenig verbessert:
using System;
using System.Text.RegularExpressions;
namespace System
{
namespace IO
{
public class IniReader
{
private inidatei[] inizeilen;
private string datei = "";
public IniReader(string file)
{
datei = file;
string[] iniread = File.ReadAllLines(file);
inizeilen = new inidatei[iniread.Length];
Regex reg = new Regex(@"^[^=]+=[^=]+$");
for (int i = 0; i < inizeilen.Length; i++)
{
if (reg.Match(iniread[i]).Success)
{
string[] temp = iniread[i].Split('=');
inizeilen[i].befehl = temp[0].Trim();
inizeilen[i].wert = temp[1].Trim();
inizeilen[i].text = "";
}
else
{
inizeilen[i].befehl = "";
inizeilen[i].wert = "";
inizeilen[i].text = iniread[i];
}
}
}
private struct inidatei
{
public string befehl;
public string wert;
public string text;
}
public string Get(string befehl)
{
string returnstring = "";
foreach (inidatei i in inizeilen)
{
if (i.befehl == befehl)
{
returnstring = i.wert;
}
}
return returnstring;
}
public bool Set(string befehl, string wert)
{
bool success = false;
for (int i = 0; i < inizeilen.Length; i++)
{
if (inizeilen[i].befehl == befehl)
{
inizeilen[i].wert = wert;
success = true;
}
}
if (!success)
{
return success;
}
StreamWriter writer = new StreamWriter(datei);
for(int i = 0; i < inizeilen.Length; i++)
{
if (!String.IsNullOrEmpty(inizeilen[i].befehl))
{
if (i == (inizeilen.Length - 1))
{
writer.Write(inizeilen[i].befehl + "=" + inizeilen[i].wert);
}
else
{
writer.WriteLine(inizeilen[i].befehl + "=" + inizeilen[i].wert);
}
}
else
{
if (i == (inizeilen.Length - 1))
{
writer.Write(inizeilen[i].text);
}
else
{
writer.WriteLine(inizeilen[i].text);
}
}
}
writer.Close();
return success;
}
}
}
}
ein wenig mehr code aber dafür bleibt alles erhalten
Hi
ich hab mir hier eine kleine dll zum lesen und schreiben von ini-dateien geschrieben
using System;
using System.Text.RegularExpressions;
namespace System
{
namespace IO
{
public class IniReader
{
private inidatei[] inizeilen;
private string datei = "";
public IniReader(string file)
{
datei = file;
string[] iniread = File.ReadAllLines(file);
inizeilen = new inidatei[iniread.Length];
Regex reg1 = new Regex(@"^[^=]*\[[^\]]*\][^=]*$");
Regex reg2 = new Regex(@"^[^=]+=[^=]+$");
for (int i = 0; i < inizeilen.Length; i++)
{
if (reg1.Match(iniread[i]).Success)
{
inizeilen[i].befehl = "";
inizeilen[i].wert = "";
inizeilen[i].text = iniread[i];
}
else if (reg2.Match(iniread[i]).Success)
{
string[] temp = iniread[i].Split('=');
inizeilen[i].befehl = temp[0].Trim();
inizeilen[i].wert = temp[1].Trim();
inizeilen[i].text = "";
}
else
{
inizeilen[i].befehl = "";
inizeilen[i].wert = "";
inizeilen[i].text = "";
}
}
}
private struct inidatei
{
public string befehl;
public string wert;
public string text;
}
public string Get(string befehl)
{
string returnstring = "";
foreach (inidatei i in inizeilen)
{
if (i.befehl == befehl)
{
returnstring = i.wert;
}
}
return returnstring;
}
public bool Set(string befehl, string wert)
{
bool success = false;
for (int i = 0; i < inizeilen.Length; i++)
{
if (inizeilen[i].befehl == befehl)
{
inizeilen[i].wert = wert;
success = true;
}
}
if (!success)
{
return success;
}
StreamWriter writer = new StreamWriter(datei);
foreach (inidatei i in inizeilen)
{
if (!String.IsNullOrEmpty(i.text))
{
writer.WriteLine(i.text);
}
else if(!String.IsNullOrEmpty(i.befehl) && !String.IsNullOrEmpty(i.wert))
{
writer.WriteLine(i.befehl + "=" + i.wert);
}
}
writer.Close();
return success;
}
}
}
}
habt ihr noch verbesserungsvorschläge?
edit: hier nochmal der richtige regex:
Regex reg1 = new Regex(@"[=][[^]]][=]*$");
Regex reg2 = new Regex(@"[=]+=[=]+$");
Okok
was mir aber noch ein dorn im auge ist, sind die unmöglichen namen
z.b. hab ich eine dll für sqlite die sich "System.Data.SQLite.DLL" nennt
ok ich kann die dll vor dem einbinden in vs umbenennen aber wenn ich dass prog dann starten will verlangt er trotzdem die "System.Data.SQLite.DLL"
gibt es ne möglichkeit das zu ändern?
die alte diskussion
das prog soll ein kleines tool sein, und da kommt es schon nicht so gut wenn neben der einen exe noch eine dll dabei ist
gut wenn jetzt 10 dlls oder sowas mit dem prog kommen dann wirkt es "wichtig" aber sonnst
🙂 gut dann hab ich dich nicht verstanden
wollte auch zuerst noch fragen was ein DBMS ist 😁
keine idee ob sowas wie sqlite schon von haus aus mit .net 2.0 mitkommt?
Original von herbivore
du meinst eine Datenbank ohne DBMS? Gibt es nicht.
öhh gibt es schon
such mal im forum nach sqlite
aber wenn du damit meinst dass es nichts gibt was so direkt von .net unterstützt wird grml
xml ist keine richtige alternative
Hi
ich such eine datenbank die ohne server auskommt
also sowas wie sqlite
da ich aber keine dll mit mir rumschleppen will such ich etwas was schon von haus aus von .net 2.0 unterstützt wird
oder eine methode um die dll ganz in der exe verschwinden zu lassen 🙂
/edit: ups bitte verschieben
och nur für dieses kleine stück code extra nen eigenen thread machen
na ich weiss nicht
Also
Application.DoEvents();
funktioniert. genau wie
this.Update();
aber welches ist denn jetzt die bessere wahl?
Cursor = Cursors.WaitCursor;
status.Text = "Suche alle Dateien";
work = new workclass();
work.getfiles(logfolderbox.Text);
status.Text = "zzzzZZZZzzzz";
Cursor = Cursors.Default;
warum macht er trotzdem status.Text = "Suche alle Dateien"; erst nach work.getfiles(logfolderbox.Text); ?
wenn ich nach status.Text = "Suche alle Dateien"; ein Thread.Sleep(1000); einfüge bringt das auch nichts
also ja ich kann nach unten zum 2. gehn
aber normalerweise macht sollte er das doch von selbst machen 🤔
also
Das schreibt er mir dann hin
er soll mir sobalt ich den parameter "anschneide" aber auch die beschreibung dafür anzeigen
/// <summary>
/// Schreibt eine Zeile
/// </summary>
/// <param name="inhalt">Der Text</param>
/// <returns>void</returns>
public void WriteLine()
{
this.WriteLine("");
}
/// <summary>
/// Schreibt eine Zeile
/// </summary>
/// <param name="inhalt">Der Text</param>
/// <returns>void</returns>
public void WriteLine(string inhalt)
{
Console.WriteLine(inhalt);
this.text[this.text.Length - 1] += inhalt;
Array.Resize(ref this.text, this.text.Length + 1);
this.text[this.text.Length - 1] = "";
}
wie bekomm ichs hin, dass er mir die beschreibung des optimalen parameters anzeigt wenn ich was reinschreib?
Hi
ich hab mein google fürs netzwerk jetzt realisiert hab aber noch ein problem:
sobalt ich om browser nach etwas gesucht habe kann sich mein google prog nicht mehr in der datenbank einloggen
hier mal der code des suchteils:
System.Data.SqlClient.SqlConnection oSQLConn = new System.Data.SqlClient.SqlConnection();
oSQLConn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dateien.mdf;Integrated Security=True;User Instance=True";
oSQLConn.Open();
string suchbegriff = Request.QueryString.Get("Text1");
string sql = "SELECT Datei, IP, Pfad, Erstellt, Artibute, Letzte FROM Dateien WHERE (Datei LIKE '%" + suchbegriff + "%') OR
(IP LIKE '%" + suchbegriff + "%') OR
(Pfad LIKE '%" + suchbegriff + "%') OR
(Erstellt LIKE '%" + suchbegriff + "%') OR
(Artibute LIKE '%" + suchbegriff + "%') OR
(Letzte LIKE '%" + suchbegriff + "%')";
System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(sql, oSQLConn);
System.Data.DataTable table = new System.Data.DataTable();
adapter.Fill(table);
oSQLConn.Close();
/edit: Wenn ich denk sqlserver prozess kille gehts wieder
einfaches beenden und neustarten des servers bingt nichts
Das geht leider nicht so
aber egal ich machs jetzt von hand
System.Data.SqlClient.SqlConnection oSQLConn = new System.Data.SqlClient.SqlConnection();
oSQLConn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dateien.mdf;Integrated Security=True;User Instance=True";
oSQLConn.Open();
string suchbegriff = Request.QueryString.Get("Text1");
string sql = "SELECT Datei, IP, Pfad, Erstellt, Artibute, Letzte FROM Dateien WHERE (Datei LIKE '%" + suchbegriff + "%') OR (IP LIKE '%" + suchbegriff + "%') OR (Pfad LIKE '%" + suchbegriff + "%') OR (Erstellt LIKE '%" + suchbegriff + "%') OR (Artibute LIKE '%" + suchbegriff + "%') OR (Letzte LIKE '%" + suchbegriff + "%')";
System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(sql, oSQLConn);
System.Data.DataTable table = new System.Data.DataTable();
adapter.Fill(table);
oSQLConn.Close();
Hi
SELECT Datei, IP, Pfad, Erstellt, Artibute, Letzte
FROM Dateien
WHERE (Datei LIKE @Suchbegriff) OR
(IP LIKE @Suchbegriff) OR
(Pfad LIKE @Suchbegriff) OR
(Erstellt LIKE @Suchbegriff) OR
(Artibute LIKE @Suchbegriff) OR
(Letzte LIKE @Suchbegriff)
hab ich mit dem VS2005 TableAdapter Wizard erstellt also nicht über die @Suchbegriff wundern
also der such auch schön nach dem suchbegriff aber ich hätte es gerne so, dass er nach Suchbegriff sucht
so nach dem ich das jetzt gemacht hab
DirectoryEntry root = new DirectoryEntry("WinNT:");
foreach (DirectoryEntry dDom in root.Children)
{
foreach (DirectoryEntry dPC in dDom.Children)
{
Console.Write(dDom.Name + " / " + dPC.Name + " ");
try
{
IPHostEntry hostInfo = Dns.GetHostEntry(dPC.Name);
Console.WriteLine("ist online " + hostInfo.AddressList[0]);
}
catch (Exception)
{
Console.WriteLine("ist offline");
}
}
}
Console.ReadKey();
würde ich die freigaben der gefundenen pcs gerne durchsuchen und die einzelnen dateien in eine datenbank schreiben. so wie google fürs lan eben.
nur weiss hab ich keine idee wie ich das machen soll
Ich hab Visual Studio 2005 Express C# und Visual Studio 2005 Express C++ installiert aber die beiden dateien hab ich nicht 🙂
/€ und der pfad heißt bei mir einfach C:\Programme\Microsoft Visual Studio 8\VC\include
[DllImport("user32.dll")]
static extern int SendMessage(int hWnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern int GetForegroundWindow();
public const Int32 WM_SYSCOMMAND = 0x112;
public const Int32 SC_SCREENSAVE = 0xF140;
SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
es lebe das internet 🙂
/€ wie bekommt man denn 0x112 und 0xF140 und die anderen codes raus?
Hi
gibt es unter .net einen Befehl um den aktuellen Bildschirmschoner zu starten?
kannst du bitte auch mal ohn installer hochladen?
der will mich zwingen .net1.1 zu laden obwohl ich 2.0 habe
Es ging um die teamspeak remote dll
Intptr ip = Marshal.StringToHGlobalAnsi("dieip")
hat mich dann zum erfolg geführt 😜
/€ der ": P" sieht hier immer so gemein aus
Ja ich hab eine funktion in der eine ip als intptr verlangt wird
ich blick nimme durch
Hi
ich hatte mal ein gutes Tut wo erklärt wurde wie man sich ein eigenes layout mit background transparenzen und eigenen buttons macht
wenn einer von euch weiss wovon ich rede dann her damit
ich kann schon verstehen wenn mir keiner helfen will 🙂
DdeClient c = new DdeClient("Gamers.IRC", "command");
c.Connect();
c.Poke("myitem", Encoding.ASCII.GetBytes("/amsg test"), 1, 6000);
so gings
Hi
nach einigem rumgesuche bei google bin ich auf den begriff dde gekommen un hab ihn auch gleich fröhlich in die boardsuche eingegeben
aber nix is
also ich will z.b. den befehl "/nick test" an mirc senden können
könnt ihr mir helfen?
Hi
ich hab ne exe datei und will ne verknüpfung zu dieser datei erstellen
wie?
hm bei 2. hast du mich nicht richtig verstanden
der TEXT soll nicht grau sein
und
this.richTextBox1.Enabled = false;
this.richTextBox1.ForeColor = System.Drawing.SystemColors.WindowFrame;
geht nicht 🤔
ähm es is nur die frage von nem quiz un wenn die doch kopieren will, kann man einfach in die datei fragen.txt schauen 😉
thx