Hallo
Ich möchte schlussendlich eine Datei per Drag & Drop auf die Exe ziehen können.
Intern wird dann der Inhalt ausgelesen und bearbeitet (Syntaxhervorhebung, tags etc..) und danach soll das ganze in eine .html File geschrieben werden.
Nun, musste frisch anfangen, weil ich jetzt im Geschäft bin.
Das Problem ist, wenn ich die Exe mit Argument (also eine Datei reinziehe das ich den Pfad & Dateinamen bekomme) aufrufe, schreibt er mir keine ouput.html File.
Wird nur die Exe Datei aufgerufen, schreibt er mir die Output.html, wieso das?
edit: Das WriteTextFile(); sollte ja sovieso ausgeführt werden, ist ja in keiner if() Bedingung... das Console.ReadLine() wird ja auch immer ausgeführt.
using System;
using System.IO;
namespace SyntaxWriter
{
/// <summary>
/// Zusammenfassung für Class1.
/// </summary>
class Class1
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if(args.GetUpperBound(0) == 0) {
Console.WriteLine(args[0]);
Console.WriteLine(ReadTextFile(args[0]));
}
WriteTextFile();
Console.ReadLine();
}
static void WriteTextFile() {
StreamWriter sw = File.CreateText("output.html");
sw.WriteLine("test");
sw.Close();
}
static string ReadTextFile(string s_path) {
string output;
StreamReader sr = new StreamReader(s_path);
output = sr.ReadToEnd();
return output;
}
}
}
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter Bucher,
die Abfrage ist verkehrt. Mag sein, dass das auch dein Problem löst, denn durch die falsche Abfrage können Exceptions entstehen. Muss heißen
if(args.GetUpperBound(0) != 0) {
oder noch besser
if(args.Length != 0) {
herbivore
Hallo Herbovire
Also "if(args.Length != 0) {" funktioniert gut, hat vorher aber auch funktioniert... weil ich einen String Array mit einem Eintrag hatte, d.h. args[0] beinhaltet den Eintrag...
Ist xyz.Length nicht für Strings gedacht?
Das Problem das die output.txt nicht geschrieben wird, ist immer noch offen. 🙁
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
beide klassen bzw. typen haben ein length attribut...
in dem fall gibt args.Length die länge des arrays args zurück...
wenn args[0]!=null ist, dann würde dir args[0].Length die länge des strings zurück geben
gibst du keinen parameter an, ist args.length0 wahr, gibts du ein argument an ist args.length1 wahr... usw.
d.h. du müßtest den code so umbauen
if(args.Length > 1) {
Console.WriteLine("Zu viele Parameter...");
} else {
if(args.Length == 1) {
Console.WriteLine(args[0]);
Console.WriteLine(ReadTextFile(args[0]));
}
WriteTextFile();
Console.ReadLine();
}
bzw. falls du den fall mit den zuvielen parametern nicht abfangen willst
if(args.Length > 0) {
Console.WriteLine(args[0]);
Console.WriteLine(ReadTextFile(args[0]));
}
WriteTextFile();
Console.ReadLine();
p.s. fehlerhandhabung (Datei nicht da etc.) nicht vergessen 😉
Danke für die Informationen, leider bringt mich das bei meinem Hauptproblem nicht weiter.
Vielleicht hab ich mich ein bisschen undeutlich verständigt.
Probiert mein Beispiel bitte einmal aus.
Wenn man sie einfach so startet, dann schreibt sie eine ouput.html, wenn man aber per Drag&Drop eine Textdatei öä. auf die Exe zieht, schreibt er keine output.html.
Wo ist da das Problem?
Das zweite Problem ist dann noch, ich lese den Inhalt (samt "\n"?) einer ganzen Textdatei ein (z. B. eine .asp Datei) ein und möchte dieses in eine neue Datei schreiben, dann schreibt er nichts (Ich benutze sr.Write()😉
Gruss Peter Bucher
using System;
using System.IO;
namespace SyntaxWriter
{
/// <summary>
/// Zusammenfassung für Class1.
/// </summary>
class Class1
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if(args.Length != 0) {
Console.Write("args fired!");
Console.WriteLine(args[0]);
Console.WriteLine(ReadTextFile(args[0]));
}
Console.WriteLine("Write fired!");
WriteTextFile();
Console.ReadLine();
}
static void WriteTextFile() {
StreamWriter sw = File.CreateText("output.html");
sw.WriteLine("test"); // Testeshalber
sw.Close();
}
static string ReadTextFile(string s_path) {
string output;
StreamReader sr = new StreamReader(s_path);
output = sr.ReadToEnd();
return output;
}
}
}
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
zu deinem 1. problem:
such mal auf der platte nach der datei... problem ist nämlich, was für ein arbeitsverzeichnis hast du^^
edit:
schau mal auf c:\ 😉
zu deinem 2. problem:
wie sieht der code aus? oder ist das ein problem bei dem hier?
ich probier jetzt aber mal dein programm aus
edit: geht soweit alles...
Wenn er die Datei per D&D auf die .exe zieht, müsste doch eigentlich der absolute Pfad der Datei übergeben werden, oder nich ? Also sollte das Arbeitsverzeichnis irrelevant sein.
Hallo sheitmann
Hilft mir leider gar nichts... die Datei wird ja geschrieben und zwar ins Projektverzeichniss, quasi dort wo die Exe ist...
Probiers einfach mal aus.
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
ja, für das lesen schon, aber nicht für das schreiben
static void WriteTextFile() {
StreamWriter sw = File.CreateText("output.html");
sw.WriteLine("test"); // Testeshalber
sw.Close();
}
beim D&D hat der die output.html bei mir auf c:\ angelegt
wenn er die datei in den gleichen ordner wie die eingangsdatei haben will, muß er den pfad entsprechend anpassen...
Original von Peter Bucher
Hallo sheitmannHilft mir leider gar nichts... die Datei wird ja geschrieben und zwar ins Projektverzeichniss, quasi dort wo die Exe ist...
Probiers einfach mal aus.
wie ich schon geschrieben habe, legt er beim einfachen aufrufen der exe die output.html in das verzeichnis der exe datei, also in dem fall dein ausgabeverzeichnis vom projekt
rufst du die anwendung auf indem du per drag and drop eine datei auf die exe schiebst, dann wird die datei unter c:\output.html erstellt
das problem ist, das du bei erstelle nder datei mit
StreamWriter sw = File.CreateText("output.html");
nur den dateinamen angibst, aber kein verzeichnis...
dadurch wird die datei in das aktuelle ausgabeverzeichnis bzw. arbeitsverzeichnis geschrieben, und das scheint nicht der ordner zu sein, indem die exe liegt... zumindest nicht bei mir
ich hab es ausprobiert btw.
Ja, eben. Bei mir nicht. Ich suche grade auch noch nach der Datei.
Beim D&D wurde mir auch bei c:\ nichts angelegt.
Der Code hab ich daheim... wie müsste den der Pfad angegeben sein... sollte der Pfad der Exe sein.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Habs auch mal probiert. Bei mir war se im Userverzeichnis 😉 also C:\Dokumente und Einstellungen\Username. Aber das kannst du ja steuern. In der Environment Kasse gibts nen entsprechendes Property.
Baka wa shinanakya naoranai.
Mein XING Profil.
Bei mir wars auch dort.
Wie heisst den die Property? Hab nichts entsprechendes gefunden.
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
property = eigenschaft 😉
gugg mal nach currentdirectory
Signatur:
Die Signatur wird unter Ihren Beiträgen dargestellt.
😁 😮 ?( 8) 😭 8o :] 🙁 =) X( 🙂 😜 😉 :rolleyes: 👶 :evil: 👅
Smilies find ich doof =]
damit setzt du das ausgabeverzeichnis/arbeitsverzeichnis zu dem verzeichnis wo deine exe liegt
Environment.CurrentDirectory = Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName;
Property = Eigenschaft... klar 😉
Danke sheitmann, dies funktioniert!
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Was muss ich für ein Encoding setzen, damit der Internet Explorer ASP Code darstellt, nicht nur im Quellcode.
Habs auch schon mit <pre> rundum probiert, nützte auch nichts... dann nehme ich mal an, es liegt an der Encoding.
Wie könnte es funktionieren?
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
also wenn ich mir den quelltext vo ndem forum hier anschau, dann haben die den quellcode in <code></code> tags gepackt... probier mal...
edit:
hm... irgendwie seltsam... geht nicht so richtig
pre müßte aber eigentlich funktionieren 😕
edit2:
ansonsten kannst du natürlich deinen ganzen code in eine html-datei umwandeln...
was du machen mußt ist:
das müßte eigentlich schon reichen
edit3:
tada 🙂 http://www.manoli.net/csharpformat/format.aspx
< > wars... sollte ich eigentlich wissen, hab zuweit gesucht X(
Natürlich noch "\n" -> "<br />"
Jetzt ist nur noch das Problem mit den Umlauten vorhanden.
Also ä wird gar nicht angezeigt.
Habe den Encoding Tester (vom Forum) schon getestet, ist mit keinem Zeichensatz richtig angezeigt worden.
Hat vielleicht noch jemand einen Tipp?
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter Bucher,
dann poste mal die HexCodes der Umlaute (äöüÄÖÜß). Sonst werden wird nicht viel sagen können.
herbivore
die deutschen umlaute sind im latin 1 (ISO-8859-1) zeichensatz enthalten... d.h. wenn du sie nicht codeirt (siehe nächste abschnitt) reinschreiben willst, mußt du den encoding typ vom html dokument mit angeben...
besser wäre es allerdings wenn du ä,ö,ü,ß usw. durch ä ö ü ß bzw. deren html-unicodes ersetzt
näheres dazu
http://www.selfhtml.net/html/referenz/zeichen.htm
http://www.selfhtml.net/html/kopfdaten/meta.htm#zeichensatz
Irgendwas ist immer noch nicht gut.
Wenn ich den content (den ich dann in die Datei schreibe) z. B. mit content.Replace("ä", "ä"); replace, kommt bei einem ä ein u raus.
Scheint also doch irgendwie an der Codierung liegen?!
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter Bucher,
und wenn es an der Codierung liegt brauchen wir die Codes, um dir zu helfen.
herbivore
wenn du dir html dateien erzeugen läßt, dan nschau dir mal den quelltext der html datei an, wie dort die zeichen drin stehen.
wenn dort anstelle eines ä ä steht, dann hast du zumindest die zeichen richtig ersetzt
ansonten wird jetz langsam zeit für codeschnipsel und htmlschnipsel 😁
Okaaay 👍
Es steht ein u drinn.... ich denke wirklich es liegt an der Codierung...
using System;
using System.IO;
namespace SyntaxWriter
{
/// <summary>
/// Zusammenfassung für Class1.
/// </summary>
class Class1
{
static string app_directory = Environment.CurrentDirectory = Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName;
static string content;
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if(args.Length != 0) {
Console.Write("args fired!");
Console.WriteLine(args[0]);
WriteTextFile(ReadTextFile(args[0]));
}
Console.ReadLine();
}
static void WriteTextFile(string content) {
StreamWriter sw = File.CreateText(app_directory + "\\output.html");
content = content.Replace("<", "<");
content = content.Replace(">", ">");
content = content.Replace("\n", "<br />");
content = content.Replace("ä", "ä");
sw.Write("<p>" + content + "</p>"); // Testeshalber
sw.Close();
}
static string ReadTextFile(string s_path) {
string output;
StreamReader sr = new StreamReader(s_path);
output = sr.ReadToEnd();
return output;
}
}
}
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
hab hier und da was geändert, jetzt gehts zumindest bei mir 🙂
using System;
using System.Text;
using System.IO;
namespace SyntaxWriter
{
/// <summary>
/// Zusammenfassung für Class1.
/// </summary>
class Class1
{
static string app_directory = Environment.CurrentDirectory = Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName;
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if(args.Length != 0) {
Console.Write("args fired!");
Console.WriteLine(args[0]);
WriteTextFile(ReadTextFile(args[0]));
}
Console.ReadLine();
}
static void WriteTextFile(string content) {
content = content.Replace("&", "&");
content = content.Replace(" ", " ");
content = content.Replace("<", "<");
content = content.Replace(">", ">");
content = content.Replace(Environment.NewLine, "<br />"+Environment.NewLine);
content = content.Replace("ä", "ä");
content = content.Replace("ö", "ö");
content = content.Replace("ü", "ü");
content = "<p>" + content + "</p>";
File.WriteAllText(Path.Combine(app_directory,"output.html"),content,Encoding.Default);
}
static string ReadTextFile(string s_path) {
return File.ReadAllText(s_path,Encoding.Default);
}
}
}
letzen endes hab ich sowohl beim einlesen und schreiben der dateien das encoding explizit auf default gesetzt, was dann die von windows nimmt.
dazu hab ich noch deine ersetzungen etwas abgeändert
zudem war dein pfad für die ausgabe mit "\output.html" inkorrekt, das muß "\output.html" heißen bzw. @ vorm string benutzen
besser ist das path.combine, da platformunabhängig
zu guter letzt hab ich noch dein lesen und schreiben durch die statischen methoden von file ersetz. wenn du deine beibehältst, mußt du mal das encoding setzen
da die codetags etwas verbugt sind, hab ich die ersetzung der zeilenumbrüche mit Environment.Newline gemacht
Ich bekomme mit deiner Version folgenden Fehler:
'System.IO.File' enthält keine Definition für 'WriteAllText'
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
achso, war mit c# 2.0 geschrieben ...
sonst ersetz das einfach weider durch deinen code, aber stell das encoding mit ein
Die Funktionen des V 2.0 FW gefallen mir aber 😁 8)
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Original von Peter Bucher
Die Funktionen des V 2.0 FW gefallen mir aber 😄8)
Jo, es sind schon einige coole Dinge hinzugekommen. Liest du die Zeitschrift iX? Da steht in der aktuellen Ausgabe ein Bericht von Rudolf Huttary und Arne Schäpers über die Neuerungen im .NET Framework 2.0 drinnen.
Gruß.
SimonKnight6600
Nein, wurde aber Heute schon einmal dazu hingewiesen 😉 🙂
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo zusammen,
die beiden schreiben regelmäßig in der c't zu .NET:
http://www.heise.de/ct/inhverz/search.shtml?T=Huttary+Sch%E4pers&Suchen=suchen
herbivore