Загрузка...

Пишу софт и нужны пара советов

Тема в разделе C# создана пользователем CLS 19 дек 2023. 338 просмотров

Загрузка...
  1. CLS
    CLS Автор темы 19 дек 2023
    Есть некое ПО которое должно допустим раз в 5 минут стучатся к компам в локальной сети и перемещать все файлы из определенной папки в "Родительский" ПК где этот софт запущен, как лучше это сделать?
     
  2. ChatGPT
    ChatGPT 19 дек 2023 2254 14 мар 2023
    CLS

    Для реализации данной задачи вам понадобится использовать сетевое взаимодействие между компьютерами в локальной сети и операции с файлами.

    Вот примерный алгоритм решения:

    1. На "Родительском" компьютере запустите сервер, который будет принимать запросы от других компьютеров и принимать файлы.
    2. На каждом компьютере в локальной сети запустите клиентскую программу, которая будет стучаться к серверу каждые 5 минут.
    3. Клиентская программа должна сканировать определенную папку на компьютере и отправлять файлы на сервер.
    4. Сервер должен принимать файлы от клиентов и сохранять их в "Родительскую" папку.

    Для реализации сетевого взаимодействия вы можете использовать сокеты или HTTP протокол. Для операций с файлами вам понадобятся функции для сканирования папки и перемещения файлов.

    Вот примерный код на C# для сервера:

    CSHARP

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;

    class Server
    {
    static void Main()
    {
    // Установка IP-адреса и порта сервера
    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    int port = 12345;

    // Создание TCP Listener
    TcpListener listener = new TcpListener(ipAddress, port);
    listener.Start();

    Console.WriteLine("Сервер запущен. Ожидание подключений...");

    while (true)
    {
    // Принятие клиентского подключения
    TcpClient client = listener.AcceptTcpClient();
    Console.WriteLine("Подключение от клиента: " + ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());

    // Получение потока для чтения данных от клиента
    NetworkStream stream = client.GetStream();

    // Получение имени файла от клиента
    byte[] fileNameBytes = new byte[1024];
    int bytesRead = stream.Read(fileNameBytes, 0, fileNameBytes.Length);
    string fileName = Encoding.ASCII.GetString(fileNameBytes, 0, bytesRead);

    // Получение данных файла от клиента
    byte[] fileData = new byte[1024];
    using (MemoryStream ms = new MemoryStream())
    {
    int bytesReceived;
    while ((bytesReceived = stream.Read(fileData, 0, fileData.Length)) > 0)
    {
    ms.Write(fileData, 0, bytesReceived);
    }

    // Сохранение файла в "Родительскую" папку
    string parentFolder = @"C:\ParentFolder";
    string filePath = Path.Combine(parentFolder, fileName);
    File.WriteAllBytes(filePath, ms.ToArray());
    }

    // Закрытие подключения
    client.Close();
    }
    }
    }
    Вот примерный код на C# для клиента:

    CSHARP

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;

    class Client
    {
    static void Main()
    {
    // Установка IP-адреса и порта сервера
    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    int port = 12345;

    while (true)
    {
    try
    {
    // Создание TCP клиента
    TcpClient client = new TcpClient();

    // Подключение к серверу
    client.Connect(ipAddress, port);
    Console.WriteLine("Подключение к серверу успешно.");

    // Получение папки для сканирования
    string folderPath = @"C:\FolderToScan";

    // Сканирование папки и отправка файлов на сервер
    foreach (string filePath in Directory.GetFiles(folderPath))
    {
    string fileName = Path.GetFileName(filePath);

    // Отправка имени файла на сервер
    NetworkStream stream = client.GetStream();
    byte[] fileNameBytes = Encoding.ASCII.GetBytes(fileName);
    stream.Write(fileNameBytes, 0, fileNameBytes.Length);

    // Отправка данных файла на сервер
    byte[] fileData = File.ReadAllBytes(filePath);
    stream.Write(fileData, 0, fileData.Length);
    }

    // Закрытие подключения
    client.Close();
    }
    catch (Exception ex)
    {
    Console.WriteLine("Ошибка: " + ex.Message);
    }

    // Ожидание 5 минут перед следующей отправкой
    Thread.Sleep(5 * 60 * 1000);
    }
    }
    }
    Обратите внимание, что это только примерный код, и вам может потребоваться внести изменения в зависимости от ваших требований и окружения. Также не забудьте добавить обработку исключений и проверки наличия папок и файлов.

    Надеюсь, это поможет вам начать реализацию вашего ПО. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
     
    1. Посмотреть предыдущие комментарии (1)
    2. ChatGPT
      CLS

      Если вы хотите обойтись без клиентского кода на каждом компьютере в локальной сети, то можно использовать другой подход.

      Вы можете настроить "Родительский" компьютер как сетевой файловый сервер, например, с помощью протокола SMB (Server Message Block). Затем на каждом компьютере в локальной сети настроить автоматическое копирование файлов из определенной папки на "Дочерних" компьютерах на сетевой файловый сервер.

      Вот примерный алгоритм решения:

      1. На "Родительском" компьютере настройте сетевой файловый сервер, например, с помощью протокола SMB.
      2. На каждом "Дочернем" компьютере настройте автоматическое копирование файлов из определенной папки на сетевой файловый сервер.
      3. Установите расписание для автоматического копирования файлов каждые 5 минут.

      Вот примерный код на C# для копирования файлов на "Дочернем" компьютере:

      CSHARP

      using System;
      using System.IO;

      class Program
      {
      static void Main()
      {
      string sourceFolder = @"C:\FolderToCopy";
      string destinationFolder = @"\\ParentComputer\SharedFolder";

      try
      {
      // Копирование файлов из исходной папки в папку назначения
      foreach (string filePath in Directory.GetFiles(sourceFolder))
      {
      string fileName = Path.GetFileName(filePath);
      string destinationPath = Path.Combine(destinationFolder, fileName);
      File.Copy(filePath, destinationPath, true);
      }

      Console.WriteLine("Файлы успешно скопированы.");
      }
      catch (Exception ex)
      {
      Console.WriteLine("Ошибка: " + ex.Message);
      }
      }
      }
      В этом примере мы используем метод `File.Copy` для копирования файлов из исходной папки в папку назначения на сетевом файловом сервере. Установите эту программу на каждом "Дочернем" компьютере и настройте расписание для ее запуска каждые 5 минут.

      Обратите внимание, что для использования сетевого файлового сервера вам может потребоваться настроить соответствующие разрешения доступа и настройки безопасности.

      Надеюсь, это поможет вам реализовать вашу задачу без клиентского кода на каждом компьютере. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
    3. CLS Автор темы
      ChatGPT, Могу ли я с помощью метода File.Move() переместить файлы из удаленного компьютера на локальный
    4. ChatGPT
      CLS

      Метод `File.Move()` в C# позволяет перемещать файлы на локальной машине, но не позволяет перемещать файлы с удаленного компьютера на локальный.

      Для перемещения файлов с удаленного компьютера на локальный вам потребуется использовать другие методы и протоколы, такие как протоколы сетевого файлового доступа (например, SMB или FTP) или удаленное выполнение команд (например, PowerShell или SSH).

      Вот примерный алгоритм решения с использованием протокола SMB:

      1. Установите и настройте сетевой файловый сервер на удаленном компьютере, например, с помощью протокола SMB.
      2. На локальном компьютере напишите код на C#, который будет подключаться к удаленному компьютеру по протоколу SMB и перемещать файлы на локальную машину.

      Вот примерный код на C# для перемещения файлов с удаленного компьютера на локальный с использованием протокола SMB:

      CSHARP

      using System;
      using System.IO;

      class Program
      {
      static void Main()
      {
      string sourceFilePath = @"\\RemoteComputer\SharedFolder\file.txt";
      string destinationFilePath = @"C:\LocalFolder\file.txt";

      try
      {
      // Перемещение файла с удаленного компьютера на локальный компьютер
      File.Move(sourceFilePath, destinationFilePath);

      Console.WriteLine("Файл успешно перемещен.");
      }
      catch (Exception ex)
      {
      Console.WriteLine("Ошибка: " + ex.Message);
      }
      }
      }
      В этом примере мы используем метод `File.Move()` для перемещения файла с удаленного компьютера по пути `sourceFilePath` на локальный компьютер по пути `destinationFilePath`. Убедитесь, что у вас есть соответствующие разрешения доступа к удаленному компьютеру и файлу.

      Обратите внимание, что для использования протокола SMB вам может потребоваться настроить соответствующие разрешения доступа и настройки безопасности.

      Если вы хотите использовать другие протоколы или методы, пожалуйста, уточните, какой именно протокол или метод вы хотите использовать, чтобы я мог предоставить более подробную информацию.

      Надеюсь, это поможет вам переместить файлы с удаленного компьютера на локальный. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
  3. Арбузим
    Арбузим 19 дек 2023 Ух биля какой арбуз https://lolz.live/threads/8642846/ 813 22 авг 2022
    Попробуй сделать лог лист что бы видеть когда и какой файл отправился на "родительский" комп
     
    1. Посмотреть предыдущие комментарии (1)
    2. Арбузим
      CLS, ну можно сделать что бы он отправлял их на файлообменник и ты получал ссылку на него в телеграмм например
    3. CLS Автор темы
      Арбузим, уффф, жестко братан) Я думал что то с FTP придумать. Но это мне не подходит так как условно я не могу на клиентах ничего менять
      19 дек 2023 Изменено
    4. Арбузим
      CLS, Можно открыть сокет на "Родительском" ПК, к которому будут подключаться остальные пк.
      И на этот сервер они будут раз 5 минут отправлять файлы
  4. Dead__Artis
    Dead__Artis 28 дек 2023 921 30 май 2020
    если тебе нужно шариться по другим компам и перемещять в них файлы, если на них открыт smb, то юзай либу для smb думаю без меня найдешь
     
  5. D1STR1CT
    D1STR1CT 17 фев 2024 2 30 мар 2021
    Есть вариант сделать PubSub на указанную папку и делать что нужно через ивенты.

    CSHARP
    using System;
    using System.IO;

    public class FolderWatcher
    {
    private FileSystemWatcher watcher;

    // Ивенты на каждое событие в папке
    public event EventHandler<string> FileCreated;
    public event EventHandler<string> FileDeleted;
    public event EventHandler<string> FileModified;
    public event EventHandler<string> FileRenamed;

    public FolderWatcher(string folderPath)
    {
    watcher = new FileSystemWatcher();
    watcher.Path = folderPath;
    watcher.EnableRaisingEvents = true;

    watcher.Created += (sender, e) => FileCreated?.Invoke(this, e.FullPath);
    watcher.Deleted += (sender, e) => FileDeleted?.Invoke(this, e.FullPath);
    watcher.Changed += (sender, e) => FileModified?.Invoke(this, e.FullPath);
    watcher.Renamed += (sender, e) => FileRenamed?.Invoke(this, e.FullPath);
    }
    }

    // Example usage:
    class Program
    {
    static void Main(string[] args)
    {
    //Путь к папке
    string folderPath = @"C:\Folder";
    var folderWatcher = new FolderWatcher(folderPath);

    //Добавление функционала (лямбда-выражения)
    folderWatcher.FileCreated += (sender, filePath) => Console.WriteLine($"Файл создан: {filePath}");
    folderWatcher.FileDeleted += (sender, filePath) => Console.WriteLine($"Файл удален: {filePath}");
    folderWatcher.FileModified += (sender, filePath) => Console.WriteLine($"Файл изменен: {filePath}");
    folderWatcher.FileRenamed += (sender, filePath) => Console.WriteLine($"Файл переименован: {filePath}");

    Console.WriteLine("Ожидание изменений...");
    Console.ReadLine();
    }
    }
     
    1. Dead__Artis
      D1STR1CT, ха только сегодня юзал для создания кода файлового менеджера
Top