Zum Inhalt springen
  • 0

Ordnerpfad definieren


Frage

15 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben (bearbeitet)
vor 24 Minuten schrieb MMazi:

Aber Ich wüsste nicht wie ich diesen Code in der Stelle von Code einsetze wo der Absolute Pfad steht

Also soweit ich mich noch an C# erinnere, müsste doch 

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

einen String zurückgeben, oder?

D.h. du musst lediglich die Stelle

string testtext = "C:/Users/mmohammadi/Documents/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";

anpassen und ersetzen durch

string testtext = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";

P.S.: an solchen Stellen solltest du übrigens im Idealfall noch mögliche Fehler abfangen und behandeln.

Bearbeitet von Rienne
  • 0
Geschrieben

Solange der Ordnerpfad Leerzeichen oder noch schlimmer Umlaute enthält, kann es immer zu Problemen kommen.

Disclaimer: Die Ausführlichkeit meiner Antwort steh im Zusammenhang mit der Ausführlichkeit der Frage

  • 0
Geschrieben
vor 28 Minuten schrieb Maniska:

Disclaimer: Die Ausführlichkeit meiner Antwort steh im Zusammenhang mit der Ausführlichkeit der Frage

Ich rate auch mal ins blaue und werfe die Stichworte "absoluter Pfad" und "relativer Pfad" in den Raum. Ob er was damit anfangen kann, keine Ahnung...

  • 0
Geschrieben

Hallo, Danke für die Antworten, beschreibe hier halt nun mal die Problematik :

Ich habe ein Zeiterfassungstool geschrieben ,das Tool ist einfach gehalten es erfasst halt nur die Aktuelle Datum und Start und Ende und speichert diese Daten in eine Text datei auf eigene Lokle Ordner.

Nun Der Pfad müsste insoweit so geändert werden, dass in jedem beliebigen Rechner in einen bestimmten Ordner die erstellte Textdatei gespeichert wird.

mit absoluter und Relativer Pfad wurde wharscheilich nicht lösbar sein sondern eher mit einer Umgebungvariablen wie %Appdata% oder %Temp% oder ähnliches, als Zieldatei sollte in dieses Pfadziel einen Ordner automatisch erstellt werden , in dem die Textdatei die jedes mal mit drücken auf speichern gestellt und erfasst werden , gespeichert wird.

ich danke euch in voraus für die Antworten

Hier der Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;

namespace Zeiterfassungstool
{
    public partial class Form1 : Form
    {
        //Globale Variabeln

        public DateTime startTime;
        public DateTime endTime;


        string v1 = System.Configuration.ConfigurationManager.AppSettings["k1"];
        string v2 = System.Configuration.ConfigurationManager.AppSettings["k2"];
        string v3 = System.Configuration.ConfigurationManager.AppSettings["k3"];
        
        public Form1()
        {
            InitializeComponent();

            btnStart.Visible = true;
            //btnEnde.Visible = false;
            //btnspeichern.Visible = false;
            btnStart.Text = "Start";

            MessageBox.Show(System.Configuration.ConfigurationManager.AppSettings["k1"]);
            MessageBox.Show(System.Configuration.ConfigurationManager.AppSettings["k2"]);
            MessageBox.Show(System.Configuration.ConfigurationManager.AppSettings["k3"]);
        }
        //--------------------------------------START------------------------------------------------
        private void btnStart_Click(object sender, EventArgs e)
        {
            if (btnStart.Text == "Start")
            {
                this.startTime = DateTime.Now;
                textBox2.Text = startTime.ToString("HH:mm:ss");
                int n = dataGridView1.Rows.Add();
                dataGridView1.Rows[n].Cells[0].Value = textBox2.Text;
                btnStart.Text = "Ende";
            }
            else
            {
                this.endTime = DateTime.Now;
                textBox3.Text = endTime.ToString("HH:mm:ss");
                int n = dataGridView1.Rows.Count - 1;
                dataGridView1.Rows[n].Cells[1].Value = textBox3.Text;
                TimeSpan dauer;
                dauer = endTime.Subtract(startTime);
                int m = dataGridView1.Rows.Count - 1;
                dataGridView1.Rows[m].Cells[2].Value = dauer.TotalHours.ToString("0.00");
                Bemerkung bemerkungdialog = new Bemerkung();
                bemerkungdialog.StartPosition = FormStartPosition.CenterScreen;


                if (bemerkungdialog.ShowDialog() == DialogResult.OK)
                {
                    int d = dataGridView1.Rows.Count - 1;
                    dataGridView1.Rows[d].Cells[3].Value = bemerkungdialog.getBemerkung();
                }
            //----------Löschen-------------------
                foreach (Control tbx in Controls)
                {
                    if (tbx.GetType() == typeof(TextBox))
                    {
                        ((TextBox)tbx).Clear();
                    }
                }
                btnStart.Text = "Start";
            }
        }
        //------------------------------------SizeChanged. NotifyIcon-------------------------------------------
        private void Form1_SizeChanged(object sender, EventArgs e)
        {

            if (this.WindowState == FormWindowState.Minimized)
            {
                notifyIcon1.Icon = SystemIcons.Application;
            }
             this.ShowInTaskbar = false;
        }   
        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.WindowState = FormWindowState.Normal;
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
 if (MessageBox.Show("Speichern?","Zeiterfassungstool", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
              string testtext = "C:/Users/mmohammadi/Documents/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
              var objWriter = new System.IO.StreamWriter(testtext);
              int count = dataGridView1.Rows.Count;
              for (int row = 0; row < count; row++)
                {
                    int columncount = dataGridView1.Columns.Count;
                    for (int column = 0; column < columncount; column++)
                {
                        objWriter.WriteLine(dataGridView1.Rows[row].Cells[column].Value.ToString());
                    }
                }
                MessageBox.Show("Text file was created.");
                objWriter.Close();
            }
            DialogResult dialog = MessageBox.Show("möchten Das Programm wirklich beenden?");
            if (dialog == DialogResult.Yes)
            {
                Application.Exit();
            }
            else if(dialog == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}

App.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <appSettings>
    <add key="k1" value="Pfad zum Speichern angeben " />
    <add key="k2" value="v2" />
    <add key="k3" value="v3" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  
</configuration>

 

Projektmappe.PNG

ZET.PNG

  • 0
Geschrieben (bearbeitet)

mit dem Relativen Pfad geht auch Aber anscheinend it Besser mit

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Aber Ich wüsste nicht wie ich diesen Code in der Stelle von Code einsetze wo der Absolute Pfad steht :

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
 if (MessageBox.Show("Speichern?","Zeiterfassungstool", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                //e.Cancel = true;
              // hier wird bei Ja gespeichert

                string testtext = "C:/Users/mmohammadi/Documents/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
                
                var objWriter = new System.IO.StreamWriter(testtext);

                int count = dataGridView1.Rows.Count;


                for (int row = 0; row < count; row++)
                {
                    int columncount = dataGridView1.Columns.Count;
                    for (int column = 0; column < columncount; column++)

                    {
                        objWriter.WriteLine(dataGridView1.Rows[row].Cells[column].Value.ToString());
                    }
                }
                MessageBox.Show("Text file was created.");
                objWriter.Close();
            }
            DialogResult dialog = MessageBox.Show("möchten Das Programm wirklich beenden?");
            if (dialog == DialogResult.Yes)
            {
                Application.Exit();
            }
            else if(dialog == DialogResult.No)
            {
                e.Cancel = true;
            }

 

 

habt Ihr vieleicht eine Idee?

Bearbeitet von MMazi
  • 0
Geschrieben (bearbeitet)

Nutzt du .NET Core? Packst du zu einer .exe (ist eine Option unter Veröffentlichung)? Wenn ja so werden deine .NET Dateien im Temp Order normalerweise irgendwo entpackt und ausgeführt. Dies führt dazu, dass das ganze Zeug mit den Pfaden oft schief läuft.

Den aktuellen Pfad zu deiner .exe bekommst du durch 

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

ich hohle mir den originalen Ausführungspfad meistens durch

string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);

 

Bearbeitet von KeeperOfCoffee
  • 0
Geschrieben

Ich danke euch für ausfürliche Antworten, Ich habe it hilfe meinem Ausbilder diesen code geschrieben und macht dann was er soll:

der speichert in My Document ,einschliesslich musste man noch dazu "/Zeitbuchung_" hinufügen :

 string testtext = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
                
               
                var objWriter = new System.IO.StreamWriter(testtext);

 

  • 0
Geschrieben
vor 21 Minuten schrieb MMazi:

Ich danke euch für ausfürliche Antworten, Ich habe it hilfe meinem Ausbilder diesen code geschrieben und macht dann was er soll:

der speichert in My Document ,einschliesslich musste man noch dazu "/Zeitbuchung_" hinufügen :


 string testtext = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
                
               
                var objWriter = new System.IO.StreamWriter(testtext);

 

 

Also mich macht sowas ja immer ein wenig sauer... Das ist genau das, was @Rienne geschrieben hat. Hast du das überhaupt gelesen? Und wieso fragst du hier - wenn du eh nicht drauf hörst - und nicht gleich deinen Ausbilder?

 

  • 0
Geschrieben

@MMazi Um die Eingangsfrage zu beantworten, so allgemein wie sie formuliert ist : NEIN.

Und was die Kollegen hier meinen ist, du sollst lesen, nachdenken und verstehen. Neben den schon genannten Leer- und Sonderzeichen, hast du auch zu bedenken, dass immer auch die Schreibrechte aufs Verzeichnis in Frage stehen. Jedes OS und viele User haben strikte Regeln wo Logs, Protokolle u.ä. liegen und ein Programm dass wild auf meiner Platte Dateien erzeugt, fliegt in 10sec wieder runter.

Also: Gibt dem Anwender die Chance zu konfigurieren, wo die Dateien hin sollen und schlag ihm dafür ein für sein OS typisches Verzeichnis vor.

  • 0
Geschrieben
vor 3 Stunden schrieb MartinSt:

Gibt dem Anwender die Chance zu konfigurieren, wo die Dateien hin sollen und schlag ihm dafür ein für sein OS typisches Verzeichnis vor.

This!

Ich entscheide wer wo auf meiner Platte Zeugs ablegt, entweder indem ich es einstellen kann, oder indem ich ein Programm wähle bei dem ich es einstellen kann.

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.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...