Usiłuję zapisywać dane, które przechodzą przez kartę sieciową (w Bytes) ale wyświetlać sobie w formie czytelnej w GB.
No i jest fajnie dopóki nie okazuje się, że tak nie jest.
-
Logowanie do plików nie działa, gdzieś się zapisuje ale nie wiem gdzie, na początku zapisywało tam gdzie miałem skompilowane exe, a teraz pewnie w jakimś temp. a nie w skazanej ścieżce -- dlaczego?
-
Jak mogę zmodyfikować ten kod aby w konsoli wyświetlał dane AKTUALNE - NOW, TERAZ, a nie historię?
-
Chciałem ale to pewnie sie nie uda, aby w pliku network_usage_data.txt był tylko ostatni zapis dla dnia (data) lub wyłączenia programu z data
w punkcie 3 chodzi o to aby to wyglądało tak:
2018-09-19=5404072084|296950464
2018-09-20=8598128866|326840254
Tylko oczywiście samo musi się dopisywać (DOPISYWAĆ) a nie usuwać aby zawsze w pliku network_usage_data.txt było takie drzewko. Jeśli wyłączyłem program np. 06.02.2024 to zapisuje on ostatni zapis z temp. plik do usage_data a gdy znów włączę to zrobi drugi wpis.
- Czy mogę automatycznie usuwać plik temp. np. po osiągnięciu wielkości albo dni gdy nie będzie już potrzebny? Docelowo potrzebny będzie tylko plik z DATA.
Kod który mam:
using System;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Threading;
class Program
{
static long totalBytesSent = 0;
static long totalBytesReceived = 0;
static string currentDay = DateTime.Now.ToString("yyyy-MM-dd");
static string tempFilePath = "C:\\Network\\network_usage_temp.txt";
static string dataFilePath = "C:\\Network\\network_usage_data.txt";
static void Main(string[] args)
{
// Wybór interfejsu sieciowego na podstawie adresu IP
string targetIPAddress = "192.168.1.10";
var netInterface = NetworkInterface.GetAllNetworkInterfaces()
.FirstOrDefault(ni => ni.GetIPProperties().UnicastAddresses
.Any(addr => addr.Address.ToString() == targetIPAddress));
if (netInterface == null)
{
Console.WriteLine($"Nie można znaleźć interfejsu sieciowego dla adresu IP {targetIPAddress}");
return;
}
while (true)
{
long bytesSent = netInterface.GetIPv4Statistics().BytesSent;
long bytesReceived = netInterface.GetIPv4Statistics().BytesReceived;
long deltaBytesSent = bytesSent - totalBytesSent;
long deltaBytesReceived = bytesReceived - totalBytesReceived;
// Aktualizacja całkowitej liczby wysłanych i odebranych bajtów
totalBytesSent = bytesSent;
totalBytesReceived = bytesReceived;
// Jeśli mamy nowy dzień, zapisujemy dane do pliku
string currentDayNow = DateTime.Now.ToString("yyyy-MM-dd");
if (currentDayNow != currentDay)
{
SaveDataToFile();
currentDay = currentDayNow;
}
// Wyświetlenie aktualnych informacji tylko na koniec dnia lub po wyłączeniu programu
Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}] Wysłano: {deltaBytesSent} bytes | Odebrano: {deltaBytesReceived} bytes");
// Oczekiwanie sekundę przed kolejnym sprawdzeniem
Thread.Sleep(1000);
}
}
static void SaveDataToFile()
{
// Zapis danych do pliku
string data = $"{currentDay}={totalBytesSent}|{totalBytesReceived}\n";
using (StreamWriter writer = new StreamWriter(tempFilePath, true))
{
writer.Write(data);
}
}
}