Melyik programozási nyelvet válasszam? C/C++/C#?

Melyik programozási nyelvet válasszam? C/C++/C#?
2021-10-17T10:57:42+02:00
2021-10-21T11:04:48+02:00
2022-10-17T07:30:42+02:00
  • vim-nél nem szabad alább adni.
    Mutasd a teljes hozzászólást!
  • A nano az hipster. Legyen joe, az normális oldschool program.
    Mutasd a teljes hozzászólást!
  • Kész lett. Köszönöm mindenkinek a segítséget! Csoda, hogy működik, de működik. Valahogy.



    Annyi maradt csak le, hogy nem vizsgálom azt, hogy létezik-e már olyan nevű fájl a path_export mappában, mint amilyet oda akarok menteni.

    Elméletileg ilyen elő se fordulhat, azért is hagytam ki. Persze sok hibakezelés hiányzik meg stb. de a lényeg, hogy működik.

    Form1.cs

    using System; using System.IO; using System.Diagnostics; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Globalization; namespace FirstApp { public partial class Form1 : Form { public static string path_import = ""; public static string path_export = ""; FileSystemWatcher watcher; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { FolderBrowserDialog dialog_import = new FolderBrowserDialog(); if(dialog_import.ShowDialog() == DialogResult.OK) { Form1.path_import = dialog_import.SelectedPath; label1.Text = Form1.path_import; if(path_import.Length > 0 && path_export.Length > 0) { button3.Enabled = true; } } } private void label2_Click(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { FolderBrowserDialog dialog_export = new FolderBrowserDialog(); if (dialog_export.ShowDialog() == DialogResult.OK) { Form1.path_export = dialog_export.SelectedPath; label2.Text = Form1.path_export; if (path_import.Length > 0 && path_export.Length > 0) { button3.Enabled = true; } } } private void button3_Click(object sender, EventArgs e) { button3.Enabled = false; this.Hide(); notifyIcon1.Visible = true; button1.Enabled = false; button2.Enabled = false; this.watch(); } private void watch() { // Create a new FileSystemWatcher and set its properties. watcher = new FileSystemWatcher(); watcher.Path = Form1.path_import; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.mp4"; // Add event handler. //watcher.Changed += new FileSystemEventHandler(OnChanged); // // watcher.Created += OnCreated; watcher.Renamed += OnRenamed; // Begin watching. watcher.EnableRaisingEvents = true; } private void OnCreated(object source, FileSystemEventArgs e) { //Copies file to another directory or another action. // Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); Thread.Sleep(1000); File.Move(e.FullPath, e.FullPath + ".firstapp"); Thread.Sleep(1000); // Process.Start(e.FullPath + ".firstapp"); } private void OnRenamed(object source, RenamedEventArgs e) { // e.OldFullPath // e.FullPath Thread.Sleep(1000); var lastPart = e.FullPath.Split('.').Last(); if (lastPart == "mp4") { File.Move(e.FullPath, e.FullPath + ".firstapp"); string nf = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(e.Name); Thread.Sleep(1000); Process prcExecuteFFMPEG = new Process(); prcExecuteFFMPEG.StartInfo.FileName = "ffmpeg.exe"; prcExecuteFFMPEG.StartInfo.Arguments = "-ss 00:00:30 -i "" + e.FullPath + ".first" -c copy "" + path_export + "\" + nf + """; prcExecuteFFMPEG.StartInfo.UseShellExecute = false; prcExecuteFFMPEG.StartInfo.RedirectStandardOutput = true; prcExecuteFFMPEG.StartInfo.CreateNoWindow = true; prcExecuteFFMPEG.Start(); prcExecuteFFMPEG.WaitForExit(); string strOutput = prcExecuteFFMPEG.StandardOutput.ReadToEnd(); File.Delete(e.FullPath + ".firstapp"); } Thread.Sleep(1000); } protected override void OnResize(EventArgs e) { base.OnResize(e); bool cursorNotInBar = Screen.GetWorkingArea(this).Contains(Cursor.Position); if (this.WindowState == FormWindowState.Minimized && cursorNotInBar) { this.ShowInTaskbar = false; this.Hide(); notifyIcon1.Visible = true; } } private void label3_Click(object sender, EventArgs e) { } private void button4_Click(object sender, EventArgs e) { Application.Exit(); } private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; notifyIcon1.Visible = false; } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { } } }

    Program.cs

    using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace FirstApp { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { bool mutexWasCreated; Mutex m = new Mutex(true, "FirstApp", out mutexWasCreated); if (!mutexWasCreated) { return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); m.ReleaseMutex(); } } }
    Mutasd a teljes hozzászólást!
  • Nem érzed kínosnak a kreativitás hiányát?

    Akár az OnCreated-ben vagy a program induláskor vagy timerre vagy bármikor ellenörzöd az alkönyvtár filejait és ha találsz olyat amit átneveznél, akkor átnevezed.

    Segítek, hátha a copipaszta jól megy:

    Directory Class (System.IO)
    Mutasd a teljes hozzászólást!
  • Eljutottam odáig, hogy ez tökéletesen működik, de csak az új fájlok megjelenésekor nevezi át azokat. Nekem arra is szükségem lenne, hogy a mappában levő összes korábban létrejött fájlt is átnevezze, tehát amik már alapból a mappában voltak. Hogyan?

    private void button3_Click(object sender, EventArgs e) { // ... this.watch(); } private void watch() { // ... watcher.Filter = "*.mp4*"; watcher.Created += OnCreated; } private void OnCreated(object source, FileSystemEventArgs e) { File.Move(e.FullPath, e.FullPath + ".firstapp"); }
    Mutasd a teljes hozzászólást!
  • (Tájpó, de kaptál lájkot. Ja... lejjebb tekerve látom, pontosan idéztél.)
    Mutasd a teljes hozzászólást!
  • ​​​​​​​​​​​​​​​​​​​​​​​​​
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • 1. FileSystemWatcher Figyelni kellene folyamatosan a path_import könyvtárat
    2. Move Ha a könyvtárba kerül egy *.mp4 fájl, akkor azt át kell nevezni ideiglenesen *.mp4.firstapp-ra.
    3. Process.Start Futtatni kell egy ffmpeg parancsot a fájlra.
    4. Regex és 2. pont Át kell nevezni a fájlt, reguláris kifejezéseket használva.
    5. 2. pont A fájlt át kell helyezni a path_import könyvtárból a path_export könyvtárba.

    Fájl sorszámozás meg GetFiles visszaad egy tömböt, .Length+1
    Mutasd a teljes hozzászólást!
  • Nézz körbe a munkaerõpiacon hány helyen követelmény a win32 API ismerete. Persze, nyilván mindenki egy platformos desktop appokat írogat mostanság, ráadásul a lehetõ legnehézkesebb módon. Igazából a win32API-t a fénykorában sem igazán használta senki, nem véletlenül terjedt el már az elején is az MFC, OWL, majd jött a Visual Basic és a Delphi. És ez még a webes, mobil és a multiplatform korszak elõtt volt.
    Mutasd a teljes hozzászólást!
  • Alf+F4 billentyűvel amúgy is be tudja zárni a felhasználó. A FormClosing event-ben meg tudod akadályozni elvileg amúgy, csak nem szokás:

    private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Are you sure to close the application?", "Close my app", MessageBoxButtons.YesNo) != DialogResult.Yes) { e.Cancel = true; } }
    Mutasd a teljes hozzászólást!
  • Még ami fontos, hogy amikor épp egy fájlon dolgozik az alkalmazás, akkor addig a button4 (Close) legyen button4.Enabled = false (ne lehessen rányomni) és addig a jobb felső sarokból is ki kellene venni a bezárási lehetőséget (X) vagy a legegyszerűbb ha azt alapból ki is veszem a jobb sarokból valahogyan és akkor csak a button4 lenyomásával lehetne bezárni az alkalmazást.

    Ezt részben megoldottam (ControlBox: False). A jobb felső sarok üres lett így, viszont sajnos más úton még bezárható az alkalmazás: képernyőkép

    Ennek megakadályozására van lehetőség, hogy így se lehessen bezárni az alkalmazást?
    Mutasd a teljes hozzászólást!
  • Ehhez a Path statikus osztály eljárásait vizsgáld meg. Pl Path.ExtractFileName visszaadja a fájl nevét kiterjesztés nélkül. Ebből tudod generálni a _2, _3 végű fájlneveket. A kiterjesztést a Path.ExtractFileExtension adja vissza.
    Ja, és a könyvtár fájljait a legegyszerűbben a Directory.GetFiles segítségéve tudod lekérdezni.
    Mutasd a teljes hozzászólást!
  • Ami még probléma lehet:

    C:\import (path_import) könyvtár:

    - ugyanaz-a-fajl-neve.mp4
    - ugyanaz-a-fajl-neve.mp4
    - ugyanaz-a-fajl-neve.mp4

    Ebben az esetben ilyet szeretnék:

    C:\export (path_export) könyvtár:

    - ugyanaz-a-fajl-neve.mp4
    - ugyanaz-a-fajl-neve_2.mp4
    - ugyanaz-a-fajl-neve_3.mp4
    Mutasd a teljes hozzászólást!
  • Biztosan jó ez a pellesC is (nem véletlen van 11.630 szakértői pontod), de annyira megtetszett a Visual Studio Community és a C#, hogy ne haragudj, de már nem szeretnék váltani.
    Mutasd a teljes hozzászólást!
  • Már „csak” ennyi kellene (a button3 gomb lenyomása után):

    1. Figyelni kellene folyamatosan a path_import könyvtárat.
    2. Ha a könyvtárba kerül egy *.mp4 fájl, akkor azt át kell nevezni ideiglenesen *.mp4.firstapp-ra.
    3. Futtatni kell egy ffmpeg parancsot a fájlra.
    4. Át kell nevezni a fájlt, reguláris kifejezéseket használva.
    5. A fájlt át kell helyezni a path_import könyvtárból a path_export könyvtárba.

    Még ami fontos, hogy amikor épp egy fájlon dolgozik az alkalmazás, akkor addig a button4 (Close) legyen button4.Enabled = false (ne lehessen rányomni) és addig a jobb felső sarokból is ki kellene venni a bezárási lehetőséget (X) vagy a legegyszerűbb ha azt alapból ki is veszem a jobb sarokból valahogyan és akkor csak a button4 lenyomásával lehetne bezárni az alkalmazást.
    Mutasd a teljes hozzászólást!
  • Eszre vetted, hogy 3 napja nem haladtal semmit?

    Nem. Már itt tartok: képernyőkép

    Köszönöm az eddigi segítséget. Még egy kis segítség és meg lesz életem első C# alkalmazása.



    Az eredeti elképzelésemhez képest annyit változtattam, hogy a könyvtárak elérési útjait nem fájlból olvasom be, hanem minden indításkor meg kell adni azokat.

    A forráskód:

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FirstApp { public partial class Form1 : Form { public static string path_import = ""; public static string path_export = ""; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { FolderBrowserDialog dialog_import = new FolderBrowserDialog(); if(dialog_import.ShowDialog() == DialogResult.OK) { Form1.path_import = dialog_import.SelectedPath; label1.Text = Form1.path_import; if(path_import.Length > 0 && path_export.Length > 0) { button3.Enabled = true; } } } private void label2_Click(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { FolderBrowserDialog dialog_export = new FolderBrowserDialog(); if (dialog_export.ShowDialog() == DialogResult.OK) { Form1.path_export = dialog_export.SelectedPath; label2.Text = Form1.path_export; if (path_import.Length > 0 && path_export.Length > 0) { button3.Enabled = true; } } } private void button3_Click(object sender, EventArgs e) { button3.Enabled = false; this.Hide(); notifyIcon1.Visible = true; button1.Enabled = false; button2.Enabled = false; } private void label3_Click(object sender, EventArgs e) { } private void button4_Click(object sender, EventArgs e) { Application.Exit(); } private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; notifyIcon1.Visible = false; } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { } } }
    Mutasd a teljes hozzászólást!
  • "Amúgy, win32 API-s C-s programot már úgy 30 éve nemigen ír senki csak az aki drivert ír"



    Hát nagyon el vagy tévedve.

    De az, hogy magadat szivatod 30 eve, nem jelenti, hogy mast is kell.
    Mutasd a teljes hozzászólást!
  • És kb. másfél év múlva eljutna akár odáig is, hogy beolvassa a config fájlt.

    Te tényleg win32 API-s C-s programot íratnál egy kezdõvel?

    Amúgy, win32 API-s C-s programot már úgy 30 éve nemigen ír senki csak az aki drivert ír windowshoz, másrészt ez kb. olyan mintha egy kezdõ autóvezetõnek odaadnál egy rakás alkatrészt azzal, hogy na akkor elõször össze kell rakni a motort.
    Mutasd a teljes hozzászólást!
  • Az elsõ a windows beépített .NET keretrendszerét használja, a másik a .NET core-t.

    Az elsõnek az az elõnye, hogy a windows beépített keretrendszerét használja, ami azt jelenti, hogy a programodnak nem kell a telepítéskor .NET core-t magával vinnie.

    A második a .NET core-t használja, ez viszont lehetõvé teszi a korszerûbb dolgok használatát. De ehhez szerintem erre nem lesz szükséged.
    Mutasd a teljes hozzászólást!
  • Eszre vetted, hogy 3 napja nem haladtal semmit?

    Ha letoltod az elejen a pellesC programod, mar programot irhatnal

    Jo eséllyel mukodne a timer is amit szeretnel.
    Mutasd a teljes hozzászólást!
  • Melyik a jó/jobb választás?

    1. Windows Forms App (.NET Framework)
    2. Windows Forms App

    Mi a különbség? Mindkettő .NET és mindkettő WinForms.
    Mutasd a teljes hozzászólást!
  • az nem lenne jó, ha c# .net core és sima konzol alkalmazás?
    ok, hogy a tálcán lenne, nem az óra mellett, de azért nem árt ha látod mi történik, főleg fejlesztés közben.
    (az is megoldható szerintem, hogy elrejtsd a konzol ablakot meg a tálca ikont, de én nem ezzel kezdeném).
    Mutasd a teljes hozzászólást!
  • igen
    ......

    És a feladathoz elég egy console alkalmazás.
    Kezdetnek így is megy.
    Mutasd a teljes hozzászólást!
  • Elég lesz ha a .NET desktop development csomagot telepítem?
    Mutasd a teljes hozzászólást!
  • Nem feltétlenül. Anno a HT-1080Z-n nem volt ilyen probléma, mert volt a beépített basic interpreter meg a gépi kód, mert mire az assemblert betöltötte a beépített magnóról kinõtt a szakállad. De ma van kismillió programnyelv/környezet és nem feltétlenül egyszerû egy kezdõnek elindulnia hogy merre.
    Mutasd a teljes hozzászólást!
  • Pont ez a különbség. Aki érdeklődik, magától tanulta a szakmát az tudta, hogy mivel fog mit programozni. Akit tanítanak, de magától nem érdeklődik általában az szokott mindenhez segítségért rohanni.
    Mutasd a teljes hozzászólást!
  • Azért mert Téged ezzel a stílussal tanítottak, nem kell mások kedvét elvennedd az alkotás örömétől.
    Mutasd a teljes hozzászólást!
  • Azért ezeket a feladat részeket kifejtve ez lehet egy elég nagy projekt is.



    2 dologból látszik ha egy projekt elfog akadni.

    1. Milyen nyelven írjam?
    2. Mi legyen a program neve?

    Ha ezekkel kezdesz, akkor el se kezd. Nem fog megvalósulni.
    Mutasd a teljes hozzászólást!
  • Erre elég a PowerShell és a Visual Studio Code.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd