Gateway_man Geschrieben 15. April 2009 Geschrieben 15. April 2009 hi leute, hab grad in der Arbeit irgendwo n Problem (ich weiß ich recht mager beschrieben aber ich sitz daheim und hab den quellcode nicht zu hand und versuch diesen part der anwendung zu rekapitulieren). Hab mir mal ne consolenanwendung zusammengeschrieben die zwar eine abgespeckte version ist aber die fast das selbe tätigt: Sub Main() Dim time As String Dim ho(1) As String Dim path1 As String time = DateTime.Now ho = Split(Tri***(time), " ") Console.Write(ho(0)) Console.Read() path1 = "test\" & ho(0) & "\" & "simon\" If My.Computer.FileSystem.DirectoryExists(path1) Then Console.WriteLine("Path1 does exist") Console.Read() Else My.Computer.FileSystem.CreateDirectory(path1) Console.WriteLine("Path1 doesn't exist") Console.Read() End If Dim writer As New System.IO.StreamWriter(path1 & "test.txt", False, System.Text.Encoding.Default) writer.Write("it does work") writer.Close() Console.WriteLine("finish") Console.Read() Console.WriteLine(My.Application.Info.DirectoryPath) Console.Read() End Sub Der Witz ist ja eigentlich bei mir funktionierts einwandfrei. OK ich hab da jetzt wirklich viel weggelassen (wo man fehler machen kann). Ich versuchs mal zu erläutern was ich genau machen will. Wie vielleicht aus meinem vorherigen thread schon herausgeht schreib ich momentan ne anwendung zum versenden von email (die auf einer sql Datenbank zurückgreift). So nun wollte ich noch eine möglichkeit einbauen, die versendeten Mails in einem vordefinierten Ordner als txt zu speichern. Beispiel: -Den Übergeordnete Ordner nennen wir mal Mail-Backup -In diesem Ordner werden die Mails in weitere Ordner die zur übersichtlichkeit dienen gespeichert. Der ordnername ist abhängig von dem jeweiligen Datum an welchem die Mails verschickt wurden. (was ich auch interessant fand war, das es keine expliziete funktion gibt die nur das Datum ausgiebt sonder wenn dann nur Datum & Uhrzeit, sprich man muss diese in ein string packen und spliten) -In dem jeweiligen Ordner befinden sich dann noch unterordner die namendlich mit den versendeten Mailadressen versehn werden. Darin befinden sich dann die Kopien die mit dem Betreff benannt wurden. Ich hatte dies schon einmal geschafft er machte es mir dann auch. Nur hatte ich dann noch veränderungsvorschläge und dannach gings nichtmehr. Wünsche noch einen schönen Abend Simon Zitieren
Klotzkopp Geschrieben 16. April 2009 Geschrieben 16. April 2009 Code, der "fast dasselbe" tut, ist bei der Fehlersuche wenig hilfreich. Ein Programm, das fast richtig ist, kann komplett anders aussehen als eins, das vollständig richtig ist. was ich auch interessant fand war, das es keine expliziete funktion gibt die nur das Datum ausgiebtDoch, gibt es: DateTime.ToString Method (String) (System) dannach gings nichtmehrist keine ausreichende Fehlerbeschreibung. Was soll eigentlich Tri*** sein? Zitieren
Gateway_man Geschrieben 16. April 2009 Autor Geschrieben 16. April 2009 (bearbeitet) Hier der Quellcode : Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For Each item As String In ComboBox1.Items TextBox2.Text = item Dim mail As New Net.Mail.MailMessage() mail.From = New Net.Mail.MailAddress("Absender") mail.To.Add(TextBox2.Text) mail.Subject = TextBox1.Text mail.Body = RichTextBox1.Text mail.IsBodyHtml = True Try mail.Attachments.Add(New Net.Mail.Attachment(TextBox3.Text)) Catch End Try If copy.Checked = True Then copyevent() End If Dim smtp As New Net.Mail.SmtpClient("SMTP Adresse") smtp.Credentials = New System.Net.NetworkCredential("User", "PW") smtp.Send(mail) mail.Dispose() smtp = Nothing Private Sub copyevent() Dim abc As String Dim def(0) As String Dim copy As String Dim copy2 As String abc = DateTime.Now def = Split(abc, " ") copy = "Copys\" & def(0) & "\" & TextBox2.Text & "\" & TextBox1.Text & ".txt" copy2 = "Copys\" & def(0) & "\" & TextBox2.Text If My.Computer.FileSystem.DirectoryExists(copy2) = True Then Dim copyw As New System.IO.StreamWriter(copy, True, System.Text.Encoding.Default) copyw.Write("Betreff:" & TextBox1.Text & vbCrLf & "Absender: ???" & vbCrLf & "Empfänger: " & TextBox2.Text & vbCrLf & "Anhang: " & TextBox3.Text & vbCrLf & " ------------------------------------------------------------------- " & vbCrLf & "Nachricht: " & vbCrLf & RichTextBox1.Text) copyw.Close() MessageBox.Show("does exist") ' bitte ignorieren dies dient lediglich dafür, damit ich weiß wieweit die schleife durchlaufen wird Else My.Computer.FileSystem.CreateDirectory(copy2) Dim copyw As New System.IO.StreamWriter(copy, True, System.Text.Encoding.Default) copyw.Write("Betreff:" & TextBox1.Text & vbCrLf & "Absender: ???" & vbCrLf & "Empfänger: " & TextBox2.Text & vbCrLf & "Anhang: " & TextBox3.Text & vbCrLf & " ------------------------------------------------------------------- " & vbCrLf & "Nachricht: " & vbCrLf & RichTextBox1.Text) copyw.Close() MessageBox.Show("doesn't exist") ' bitte ignorieren dies dient lediglich dafür, damit ich weiß wieweit die schleife durchlaufen wird End If End Sub Next hat sich jedoch schon erledigt, da es höchst warscheinlich an den Strings in der copyevent() Prozedur liegt war gestern doch schon recht müde . Muss etz erst mal genau schaun da die String doch recht unübersichtlich gehalten sind :confused: . Tri*** benutzt man um bei String die eventuell enstehenden lehrzeichen vor und nach dem String wegzuschneiden. (AFAIK) Wie ich gerade erst gesehn hab wird auch im quellcode die sternchen angezeigt deswegen die frage. Es handelt sich hierbei um Trim $ , natürlich ohne lehrzeichen, nur zeigt mir dann die seite *** an. mfg simon Bearbeitet 16. April 2009 von Gateway_man Zitieren
DominikJ Geschrieben 16. April 2009 Geschrieben 16. April 2009 Tri*** benutzt man um bei String die eventuell enstehenden lehrzeichen vor und nach dem String wegzuschneiden. (AFAIK) Also ich nutze dafür Trim? Zitieren
Gateway_man Geschrieben 16. April 2009 Autor Geschrieben 16. April 2009 exakt das, was ich meinte :-D nur leider konnte die seite es nicht darstellen zumindest nicht in verbindung mit dem "$" Zeichen. Zitieren
Gateway_man Geschrieben 16. April 2009 Autor Geschrieben 16. April 2009 hat sich erledigt. Noch ein problem hab ich da noch: Dim oldsb As String Dim startuppath As String startuppath = Tri***(My.Application.Info.DirectoryPath.ToString) oldsb = Tri***(OpenFileDialogsb.FileName.ToString) ' MessageBox.Show(oldsb) My.Computer.FileSystem.CopyFile(oldsb, startuppath & "\SBV\") sbrefresh() Das problem liegt darin das ich nur den Zielpfad angeben will und nicht auch noch den Dateinnamen den die zu kopierende Datei dann hat angeben muss. So wie es jetzt ist meldet er mir nen Fehler, da ich als Ziel nur den Pfad angegeben habe " startuppath & "\SBV\") " . So will ich das aber ich meine die Files variieren ja auch und ich will nicht immer einen namen der zu kopierenden Datei für den Zielpfad eingeben müssen. Ich will das der Dateiname gleich bleibt. lg simon Zitieren
DominikJ Geschrieben 17. April 2009 Geschrieben 17. April 2009 dann nimm dir doch die letzte Position von "\" in deinem vorherigen pfad +1 und dann haste deinen dateinamen. Entweder per strpos, split oder halt zeichen von hinten durchlaufen und warten bis ein \ kommt ... Zitieren
Gateway_man Geschrieben 17. April 2009 Autor Geschrieben 17. April 2009 split oder halt zeichen von hinten durchlaufen und warten bis ein \ kommt ... Das hört sich interessant an. Geht das ? einen string von ende nach anfang zu spliten. Ich hab auch schon daran gedacht, aber mir war nicht bewusst wie man den string von ende nach anfang splitet (bzw. ist es mir immer noch nicht bewusst wie) deshalb habe ich diese möglichkeit außer acht gelassen, da man ja unterschiedliche Pfade hat und ich dann ja nicht immer weiß welches element der Dateiname ist (okay man kann natürlich auch sagen das es immer das letzte array element ist). Hättest du evtl n bsp für die oben erwähnte split funktion? Normal wäre es ja wie folgt: Dim test As String = "Gott is des schee heut schon wieder Freitag, aber muss trotzdem noch bis 18 Uhr arbeiten" Dim test2(1) As String test2 = Split(test, ", ") Console.Write(test2(0)) Console.Read() 'Consolenausgabe = Gott is des schee heut schon wieder Freitag hier wäre es ja nicht schwer zu sagen das er mir den teil nach dem komma ausgeben soll einfach 0 mit einer 1 ersetzen. Aber wenn die größe der Felder des arrays zur laufzeit unbekannt sind, dann seh ich da n problem, jedoch wenn du weiß wie man einen string von ende nach anfang spliten kann wäre das auch kein problem mehr wie gesagt würd mich über informationen diesbezüglich freuen. Zitieren
DominikJ Geschrieben 17. April 2009 Geschrieben 17. April 2009 (bearbeitet) Z.b. das hier ist eine Möglichkeit: Dim splitted() As String = "C:\abc\def\ghi\j.txt".Split("\") MsgBox(splitted(splitted.Length - 1))[/PHP] Oder [PHP] Dim path As String = "C:\abc\def\ghi\j.txt" MsgBox(path.Substring(path.LastIndexOf("\") + 1)) Oder Dim path As String = "C:\abc\def\ghi\j.txt" Dim splitted() As Char = path.ToCharArray Dim result As String = "" For i As Integer = splitted.Length - 1 To 0 Step -1 If splitted(i) <> "\" Then result = splitted(i) & result Else Exit For End If Next MsgBox(result) [/PHP] Bearbeitet 17. April 2009 von DominikJ Zitieren
Gateway_man Geschrieben 17. April 2009 Autor Geschrieben 17. April 2009 Danke funktioniert ;-) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.