Jump to content

Recommended Posts

Geschrieben

Hallo,

ich habe ein Programm auf C# geschrieben, bei dem unter anderem die Zeit- und Datumsangabe des Red Bricks ausgegeben werden sollte (z.B.: DateTime.Now.Second). Bekomme dabei aber jedesmal, wenn ich es auf dem Red Brick laufen lasse die Fehlermeldung:

"Unhandled Exception:

System.IO.FileNotFoundException: Could not find file "/etc/localtime"

File name: '/etc/localtime'"

 

Beim Debuggen des Programms über Visual Studio funktioniert es hingegen einwandfrei, hierbei wird wahrscheinlich einfach die Computer-Zeitangabe verwendet.

Wäre hierbei sehr dankbar für Hilfe.

Meine zweite Frage wäre, wie ein Befehl aussieht die Red Brick Zeit über einen Programmtext individuell abzuändern. Also beispielsweise irgendein Datum mit beliebeiger Zeit vorzugeben.

Vielen herzlichen Dank.

Geschrieben

Moin,

das ist vermutlich auf einen Bug im Brick Viewer zurückzuführen, der mit Version 2.4.5 gefixt wurde.

 

/etc/localtime ist ein Symlink auf die gewünschte Zeitzone in /usr/share/zoneinfo/. Vor Version 2.4.5 hat der Brick Viewer aber localtime auf nicht vorhandene Dateien gelinkt, C# gibt dann die FileNotFoundException aus.

 

Wenn du mit dem aktuellen Brick Viewer die Zeitzone des RED-Brick neu setzt, sollte das Problem behoben sein.

 

Um die Zeit des RED-Bricks zu setzen kannst du

date

auf der Kommandozeile oder mit System.Diagnostics.Process verwenden. Zum Beispiel mit

date +%s -u -s @1565681174

(als Unix-Timestamp, so macht es der Brick Viewer) oder mit

date -s "13 AUG 2019 09:25:30"

  • 2 weeks later...
Geschrieben

Vielen Dank für die Hilfe👌

Das Programm läuft jetzt auf dem Red Brick.

 

Mir ist leider noch nicht ganz genau klar, wie ich die Zeit auf dem Red Brick manuell manipulieren kann. Muss ich dazu using System.Diagnostics bzw. Using System.Diagnostics.Process einbinden? Denn wenn ich im Programm-Code alleine date verwenden möchte, kennt das Programm den Befehl nicht. Mein Ziel wäre es nämlich die Red Brick Zeit anhand von integer Variablen zu setzen.

 

Zum Beispiel:

int stunde = 12;

int minute = 5;

int sekunde = 12;

Diese Daten dann neu als Red Brick Zeit setzen.

Vielen Dank.😊

Geschrieben

Process kannst du verwenden, wie hier beschrieben. In deinem Fall müsste

myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";

stattdessen

myProcess.StartInfo.FileName = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stunde, minute, sekunde);

(o.Ä.) sein.

Geschrieben

Was gerade noch aufgefallen ist: Datum/Zeit zu setzen geht nur mit Root-Rechten. Du kannst aber dem Standarduser (also tf) erlauben, das ohne Root-Passwort zu tun, in dem du auf der seriellen Konsole des RED-Brick einmalig folgenden Befehl ausführst:

echo 'tf ALL=(root) NOPASSWD: /bin/date' | sudo tee -a /etc/sudoers

Wenn du dann in deinem Programm

/bin/date

durch

/usr/bin/sudo /bin/date

ersetzt, sollte es klappen.

Geschrieben

Danke für die Infos.

Hab jetzt einmalig den Befehl:

echo 'tf ALL=(root) NOPASSWD: /bin/date' | sudo tee -a /etc/sudoers

 

auf der Red Brick Serial Consol ausgeführt.

 

Zusätzlich habe ich in meinem Code folgende Zeilen geschrieben:

 

using (Process myProcess = new Process())

{

  //myProcess.StartInfo.UseShellExecute = false;

  myProcess.StartInfo.FileName = String.Format("/usr/bin/sudo /bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund);

  //myProcess.StartInfo.CreateNoWindow = true;

  myProcess.Start();

}

 

Die auskommentierten Zeilen brauch ich ja nicht oder?

Bei diesem Programm kommt jedenfalls immer ein Fehler beim Aufrufen von myProcess.Start();

Wenn ich diesen Befehl weglasse, wird zwar das Programm ausgeführt jedoch wird die Zeit nicht verändert. (Die Bibliotheken using System;

using System.Diagnostics; using System.ComponentModel; habe ich oben in mein Programm eingebunden)

 

Macht ja nichts, dass ich diesen Programmtext erst mitten in meinem Code geschrieben habe oder?

Vielen Dank für weitere Hilfe :) :)

 

Unbenannt.JPG.25b8cf16e311c413e87f0a6e0afa431b.JPG

Geschrieben

Ah, manchmal ist man einfach betriebsblind, sorry dafür. Das Problem ist, dass StartInfo den Namen der ausführbaren Datei und die Argumente getrennt will, da ja auch keine Shell benutzt wird (deshalb optionalerweise UseShellExecute = false). So funktioniert es bei mir:

using (Process myProcess = new Process())
{
    myProcess.StartInfo.FileName = "/usr/bin/sudo";
    myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund);
    myProcess.Start();
}

Geschrieben

Ja jetzt läufts, vielen herzlichen Dank :)

Falls ich den Tag, Monat und Jahr ebenfalls noch als integer Variable zu Anpassung der Red Brick Zeit verwenden würde, wie würde sich da die Zeile:

 

myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"22 AUG 2019 {0:00}:{1:00}:{2:00}\"", stund, minut, sekund);

 

 

noch ändern?

Geschrieben

Hallo, könnte mir bitte jemand noch bei der Anpassung der Zeit mit der Berücksichtigung der Jahreszahl, Monatsangabe und Anzahl des Tages als integer Variabel helfen. Ich weiß nicht genau wie ich die Zeile myProcess.StartInfo.Arguments dementsprechend abändern muss, dass ich diese drei Variablen auch vorgeben kann.

Vielen herzlichen Dank im Voraus😊👍

Geschrieben

Dafür musst du die Teile in dem Datumsstring auch durch Platzhalter ersetzen, die du dann mit String.Format einsetzt, z.B so:

myProcess.StartInfo.Arguments = String.Format("/bin/date -s \"{0:00} {1} {2:0000} {3:00}:{4:00}:{5:00}\"", jahr, monat, tag, stunde, minute, sekunde);

Den Monat musst du als String reingeben, also z.b. AUG oder SEP. Alternativ kannst du dir mal die anderen Formate ansehen, die date versteht, die sind z.B. hier dokumentiert.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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

×
×
  • Neu erstellen...