Printable Version of Topic
Click here to view this topic in its original format
თბილისის ფორუმი > პროგრამირება > შEიძლება თუ არა


Posted by: akina 28 Jan 2018, 20:39
მინდა დამაწერინოთ პროგრამა, თუ საერთო შეიძლება

რომელშიც მითითებული იქნება ერთი ფოლდერი, და ამ ფოლდერში მყოფ ინფორმაციას შლიდეს ვთქვათ 10 წთში, ხოლო რისი წაშლაც არ შეიძლება (ვთქვათ პროცესშია და მაგიტომ) არ ამოაგდოს რაიმე ფანჯარა,ა რამედ უბრალოდ თავისით გამოტოვოს.

ანუ შლიდეს ისეთ ფაილებს რომლის წაშალც ხერხდება, და ამას აკეთებდეს ჩუმად, ვირუსივით biggrin.gif

Posted by: Roofus 28 Jan 2018, 21:12
კი

Posted by: akina 28 Jan 2018, 21:15
QUOTE (Roofus @ 28 Jan 2018, 21:12 )
კი

ძნელი თუ არაა, არ სიძლება კოდი დამიწეროს ვინმემ smile.gif


Posted by: Roofus 28 Jan 2018, 21:19
akina
QUOTE
ძნელი თუ არაა, არ სიძლება კოდი დამიწეროს ვინმემ

კონკრეტულად როგორ გინდა? სად გინდა? ვინდოუსზე? სად წაშალოს? რა ფოლდერშიც იქნება?
ჩუმად იყოს ჩართული? დეტალები მომწერე... თუ მეცლება დაგიწერ.

Posted by: akina 28 Jan 2018, 21:54
QUOTE (Roofus @ 28 Jan 2018, 21:19 )
akina
QUOTE
ძნელი თუ არაა, არ სიძლება კოდი დამიწეროს ვინმემ

კონკრეტულად როგორ გინდა? სად გინდა? ვინდოუსზე? სად წაშალოს? რა ფოლდერშიც იქნება?
ჩუმად იყოს ჩართული? დეტალები მომწერე... თუ მეცლება დაგიწერ.

ვინდოუსზე მინდა temp ფაილშია რსებულ ფაილებს შლიდეს ვთქვათ ყოველ 5 წთში, ოღონდ ისე რომ, რამე საქმეს რომ ვაკეთებდე, დესკტოპზე არ გამომიგდოს ფანჯარა... ანუ ჩუმად აკეთებეს ყვეალფერს...

Posted by: Roofus 28 Jan 2018, 23:37
akina
PM გიპასუხე. smile.gif





საერთოდ როგორც მახსოვს ვინდოუსთან რთულია ფაილების წაშლის თემა. run as administrator - ის თემაში.
ლინუქსში რა იუზერიც უშვებს პროგრამას იმ იუზერის უფლებებით სარგებლობს. შესაბამისად ფოლდერში სხვისი ჩაყრილი ფაილები ნაკლებად აღმოჩნდება.

Posted by: akina 29 Jan 2018, 16:16
კიდევ ვინმეს ხომა რ აქვს დახმარების სურვილი?

Posted by: elodin 29 Jan 2018, 16:19
akina
QUOTE
კიდევ ვინმეს ხომა რ აქვს დახმარების სურვილი?

არ დაგეხმარა როოფუსი ?

Posted by: Roofus 29 Jan 2018, 16:49
elodin
QUOTE
არ დაგეხმარა როოფუსი ?

არა, ხო... ვერ ვიცლი user.gif

თუ დრო გაქვს დაუწერე C-ში რამე user.gif

Posted by: ბიჭური 29 Jan 2018, 17:05
akina

Visual Studio 2017 გადმოწერე და С# კონსოლური პროექტი შექმენი, ეს კოდი სცადე.
შენი ფოლდერის მისამართი მიუთითე

"ჩუმად" არ იზამს არაფერს, კონსოლში დაწერს შედეგებს. თუ გინდა რომ გაქრეს და ჩუმად აკეთოს, შენით გადააკეთე კოდი, ეს ვარჯიშის პონტში.

CODE
     
static void Main(string[] args)
       {
           DeleteFiles();
           Console.ReadLine();
       }

internal static void DeleteFiles()
       {
           var path = "C:\\PATH_TO_YOUR_FOLDER\\";
           var files = Directory.GetFiles(path);
           var deleterThread = new Thread(() =>
           {
               try
               {
                   foreach (var file in files)
                   {
                       Console.WriteLine("Deleting file : {0}", file);
                       File.Delete(file);
                   }
               }
               catch(Exception ex)
               {
                   Console.WriteLine("Failed to delete file {0}", ex.Message);
               }
               Thread.Sleep(10000);
           });
           deleterThread.Start();
           deleterThread.Join();
           Console.WriteLine("File deletion complete");
           
       }
   }

Posted by: akina 29 Jan 2018, 22:11
ბიჭური

საქმე იმაშია რომ პროგრამირება არ ვიცი, ასე რომ ევრ აგდავაკეთებ, ამქსიმუმ ფოლდერი და დრო მივუთითო


კონკრეტუალდ ადვწერ რა მინდა რა

მინდა ჩუმად შლიდეს temp ფაილშია რსებულ ფაილებს ყოველ 5 წთში, ისე რომ არანაირ ფანჯარას არ მიგდებდეს.

თუ ვინმე ამის კოდს დაიწერს (თუ სEიძლება) დიდი ამდლობელი ვიქნები)
დანარჩენებს თუ რამეა ფოლდერს და დროს მე სევუცვლი ხოლმე...
პროსტა სისტემური პროგრამირების აზრზე არ ვარ და smile.gif

Posted by: Roofus 29 Jan 2018, 22:58
akina
https://www.howtogeek.com/201930/how-to-automatically-delete-files-in-your-download-folder-on-a-schedule/


ამას გადახედე აბა... მარტივად შეიძლება ვინდოუსში ეგ.
აქ უბრალოდ 30 და 7 დღეა. დღეები შეგიძლია წუთებზე შეცვალო და Download ნებისმიერ სხვა ფოლდერზე.

Posted by: ბიჭური 29 Jan 2018, 23:02
akina

ხვალ დაგიწერ ისეთს რომ არ ჩანდეს, ახლა გავიპროჭე და მეზარება

Posted by: DeveloperX 29 Jan 2018, 23:51
ბიჭური
CODE
foreach (var file in files)
{
  try
  {
     File.Delete(file);
  }
  catch(Exception ex)
  {
     
  }
}

Posted by: ბიჭური 30 Jan 2018, 00:39
DeveloperX

martali xar dsma my bad

---------------------------------------------
* * *
აჰა.
როცა გაუშვებ, ყოველ 10 წუთში ერთხელ წაშლი TEMP ფოლდერიდან ფაილებს.
თუ ფაილი არის .e x e და გაშვებულია, მაშინ მაგის პროცესს იპოვის და გამორთავს, შემდეგ მაგ ფაილსაც მიამაზაფაქერებს და წაშლის.

Visual Studio 2017 გადმოწერე, С# კონსოლური აპლიკაცია შექმენი და იქ დააკოპირე ეს კოდი.

Build project ოფციებში როცა მისცემ Release, არანაირ ფანჯარას არ გამოაჩენს. როცა იქნება Debug, კონსოლი გამოგიჩნდება რომელშიც ეწერება, რომელი ფაილის წაშლა მიმდინარეობს.

CODE

public class Program
   {
       [DllImport("kernel32.dll", SetLastError = true)]
       [return: MarshalAs(UnmanagedType.Bool)]
       static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);

       [DllImport("kernel32.dll", SetLastError = true)]
       public static extern IntPtr OpenProcess(
           ProcessAccessFlags processAccess,
           bool bInheritHandle,
           int processId);

       [Flags]
       public enum ProcessAccessFlags : uint
       {
           All = 0x001F0FFF,
           Terminate = 0x00000001,
           CreateThread = 0x00000002,
           VirtualMemoryOperation = 0x00000008,
           VirtualMemoryRead = 0x00000010,
           VirtualMemoryWrite = 0x00000020,
           DuplicateHandle = 0x00000040,
           CreateProcess = 0x000000080,
           SetQuota = 0x00000100,
           SetInformation = 0x00000200,
           QueryInformation = 0x00000400,
           QueryLimitedInformation = 0x00001000,
           Synchronize = 0x00100000
       }


       [DllImport("kernel32.dll")]
       static extern IntPtr GetConsoleWindow();

       [DllImport("user32.dll")]
       static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

       const int SW_HIDE = 0;
       const int SW_SHOW = 5;

       public static void Main(string[] args)
       {
#if !DEBUG
           var handle = GetConsoleWindow();
           ShowWindow(handle, SW_HIDE);
#endif
           var deleterThread = new Thread(DeleteFiles) {Priority = ThreadPriority.Highest, IsBackground = true};
           deleterThread.Start();
           deleterThread.Join();
           Console.ReadLine();
       }

       internal static void DeleteFiles()
       {
           while (true)
           {
               var path = Path.GetTempPath();
               var files = Directory.GetFiles(path);
               var processes = Process.GetProcesses();
               foreach (var file in files)
               {
                   try
                   {
                       if (file.EndsWith(".###"))
                       {
                           var fileName = file.Split('\\').Last().Split('.').First();
                           var findProc = processes.FirstOrDefault(x => x.ProcessName.Contains(fileName));
                           if (findProc != null)
                           {
                               var procId = findProc.Id;
                               var handle = OpenProcess(ProcessAccessFlags.All, false, procId);
                               if (handle != IntPtr.Zero)
                               {
                                   TerminateProcess(handle, 1);
                               }
                           }
                       }
#if DEBUG
                       Console.WriteLine("Deleting file.....{0}", file);
#endif
                       File.Delete(file);
                   }
                   catch (Exception ex)
                   {
#if DEBUG
                       Console.WriteLine("Error deleting file {0}, Exception thrown {1}", file, ex.Message);
#endif
                   }
                   finally
                   {
                       Thread.Sleep(600000);
                   }
               }
           }
       }
   }

Posted by: akina 30 Jan 2018, 17:21
ბიჭური
დიდი მადლობა კოდისთვის
და ერთი აპტარა სEკიტხვა ამქვს
ეს კოდი var path = Path.GetTempPath(); რომ ჩავანაცვლო var path = "C:\Users\UserName\AppData\Local\Temp\"; ხომ ეიძლება
ანუ ეს იმიტომ გითხე რომ, სხვა ფოლდერი რომ მივუთითო მაგ სემთხვევისთვისთქო

Posted by: ბიჭური 30 Jan 2018, 19:07
akina

კი, ოღონდ ორი "\\"

C:\\Example\\

--------------------------------------------------------------------------------

Posted by: zgarb7 30 Jan 2018, 19:23
ბიჭური
ეგ პინვოკებით რაც იწვალე რო კონსოლის ფანჯარა დაგემალა იგივე შეიძლებოდა მაგის გარეშე გაკეთებინა winform-ების პროექტი, Main მეთოდში Application.Run ში new form1 წაგეშალა და სულ არ გამოიტანდა არანაირ ვიზუალს ანუ ბექგრაუნდში იქნებოდა პროგრამა. დანარჩენ კოდსაც იქ ჩაწერდი მაინ ში როგორც აქ გაქ. მეც ადრე რო მინდოდა ფანჯრის დაფარვა და არ ვიცოდი რო ვინფორმის პროექტი აკეთებდა მარტივად მაგას პინვოკებით ვწვალობდი ხოლმე.

Posted by: ბიჭური 30 Jan 2018, 19:32
zgarb7

ვიცი როგორც უნდა. იმიტომ გავაკეთე ეგრე რომ კონსოლური მინდოდა.
კონსოლის დამალვა უფრო მარტივადაც შეიძლება.
აკეთებ კონსოლურ პროექტს, სეთინგებში შედიხარ და output-ს უწერ Windows Application.

უბრალოდ ბიჭური მარტივ გზებს არ ეძებს..

Posted by: DeveloperX 30 Jan 2018, 19:33
და Windows Service-ს რას უწუნებთ?

Posted by: elodin 31 Jan 2018, 09:34
QUOTE
და Windows Service-ს რას უწუნებთ?

სად დაიწუნეს?

biggrin.gif

Posted by: DeveloperX 31 Jan 2018, 14:15
elodin
როგორც მივხვდი, თემის ავტორს Windows Service-ი სჭირდებოდა.
QUOTE
ამას აკეთებდეს ჩუმად, ვირუსივით


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)