Informatikai Barkács Fórum

PROGRAMOZÁS => Általános => A témát indította: ktomi Dátum 2014 január 06, 01:04:33 DÉLELŐTT

Cím: MV C# probléma
Írta: ktomi Dátum 2014 január 06, 01:04:33 DÉLELŐTT
Üdv.

Elkezdtem csinálni egy kis programocskát magamnak, viszont egy kis problémába ütköztem... Nézelődtem a neten és ott láttam, hogy Resources-ben tároltak egy képet és azt jelenítették meg egy gomb megnyomásával.
Én is valami hasonlót szeretnék... Van egy felhasználótól bekért mappanevünk, amit a program ellenőriz, hogy létezik-e, ha nem akkor létrehoz egy mappát azzal a névvel, abba pedig egy txt fájlt.
Összességében úgy szeretném a mappákat és a txt fájlt létrehozni, hogy a felhasználó ne lássa ezeket.
Esetleg volna valakinek ötlete, hogy ezt hogyan lehetne megvalósítani?
Cím: Re:MV C# probléma
Írta: Szilárd Dátum 2014 január 06, 08:37:34 DÉLELŐTT
Üdv!

A képmegjelenítéses dologra itt találsz választ, ha minden igaz: http://social.msdn.microsoft.com/Forums/windows/en-US/23abee3d-e9d2-4aa6-8859-68ea8c8138d0/how-to-display-image-using-c-but-after-you-clicked-a-button (http://social.msdn.microsoft.com/Forums/windows/en-US/23abee3d-e9d2-4aa6-8859-68ea8c8138d0/how-to-display-image-using-c-but-after-you-clicked-a-button)

A mappa készítésre pedig ez a megoldás, ha jól értelmezem azt amit írtál:
Kód (csharp) Kijelölés

void CreateHiddenDirectory(string dir)
{
  if (!Directory.Exists(dir))
  {
    DirectoryInfo di = Directory.CreateDirectory(dir);
    di.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.ReadOnly;

    // Ezek után a fájlt is létrehozod benne.
  }
}


Remélem ezzel segítettem neked.

Szilárd
Cím: Re:MV C# probléma
Írta: ktomi Dátum 2014 január 06, 12:25:33 DÉLUTÁN
Köszönöm szépen a segítséget. A képes dolgot összehoztam, viszont a mappás résznél nem egészen így gondoltam. Valami olyasmire gondoltam, hogy ugyebár a programon belül létre lehet hozni mappát(Projectre jobb klikk-Add-New folder) és txt fájlt is(Add-New item-Text file).  És ezt a mappa létrehozást paranccsal, a program futtatásakor szeretném megvalósítani(/ellenőriztetni) és a text fájlra hivatkozni.
Cím: Re:MV C# probléma
Írta: kagebunshin Dátum 2014 január 06, 07:38:40 DÉLUTÁN
Üdv!

Tehát ha jól értelmezem a programnak futás közben kellene módosítani a saját projekt fájljait. Nem igazán értem miért van erre szükség vagy hogy minek is kéne történnie ha esetleg a program nem a fejlesztőkörnyezetben fut. De mivel érdekesnek tartottam a feladatot elgondolkodtam rajta és ha nem is a legtökéletesebb, de született egy megoldás.

A kódot a Visual Studio Express 2012-ben írtam. Más verzióban elképzelhető hogy van némi különbség, de szerintem az elv ugyanaz.

Tehát a vs a projekthez tartozó fájlok és könyvtárak listáját a "csproj" fájlban menti el. Ez gyakorlatilag egy xml fájl. Létrehoztam néhány könyvtárat, hogy megfigyeljem. Ha csak 1 könyvtár 1 fájl létrehozására van szükség akkor ez elég is lesz.

  <ItemGroup>
    <Folder Include="NewFolder2\" />
    <Folder Include="NewFolder3\" />
  </ItemGroup>
  <ItemGroup>
    <Resource Include="NewFolder1\TextFile1.txt" />
  </ItemGroup>


Tehát a könyvtár és a fájl létrehozása után módosítanunk kell a projekt fájl. Hogy ezt miként érjük el az már részletkérdés. Én most itt megosztom a saját teszt kódomat. Leteszteltem, működik is. Futtatás után a vs jelzi, hogy néhány fájl megváltozott. Itt Reload vagy reload all és fel is ismeri.

        private string projectPath = @"..\..\Add Solution dir Teszt.csproj";
        private string itemgroup = "</ItemGroup>";

        private void addSolutionDir(string dir, string file)
        {
            //project fájl tartalmának beolvasása
            string fileText = File.ReadAllText(projectPath);

            //megkeressük az utolsó itemgroup helyét
            int index = fileText.LastIndexOf(itemgroup);

            if (index == -1)
                return;

            //az indexet eltoljuk az itemgroup méretével
            index += itemgroup.Count();

            //létrehozzuk a projecthez hozzáfűzendő stringet
            StringBuilder sb = new StringBuilder();
            sb.AppendLine();
            sb.AppendLine("  <ItemGroup>");
            sb.AppendLine("    <Resource Include=\"" + dir + "\\" + file + "\" />");
            sb.Append("  </ItemGroup>");

            //hozzáfűzzés
            fileText = fileText.Insert(index, sb.ToString());

            //elmentjük a változtatást
            File.WriteAllText(projectPath, fileText);
        }


Esetleg ha valaki tud egyszerűbb megoldásról ne fogja vissza magát :)
Cím: Re:MV C# probléma
Írta: ktomi Dátum 2014 január 12, 01:31:28 DÉLELŐTT
Köszönöm szépen az eddigi segítséget, viszont lenne még egy kérdésem.
Ha van két dátumom "yyyy-MM-dd HH:mm:ss" ilyen formában, akkor azt hogy tudnám összehasonlítani, hogy melyik a régebbi?
Cím: Re:MV C# probléma
Írta: kagebunshin Dátum 2014 január 12, 02:42:59 DÉLELŐTT
string strDatum1 = "2014-01-12 02:11:00";
string strDatum2 = "2014-01-11 02:11:00";

DateTime datum1 = DateTime.Parse(strDatum1);
DateTime datum2 = DateTime.Parse(strDatum2);

if (datum1.CompareTo(datum2) < 0)
    Console.WriteLine("Az első a régebbi");
else
    Console.WriteLine("A második a régebbi");


Sok magyarázatot gondolom nem igényel. 2 string-ben vannak a dátumok, amiket a DateTime Parse metódusával átalakít. A CompareTo metódus pedig értelemszerűen összehasonlítja őket. Ha kisebb mint 0, akkor az első a régebbi, ha nagyobb akkor a második.
Cím: Re:MV C# probléma
Írta: ktomi Dátum 2014 január 12, 12:11:08 DÉLUTÁN
Remek! Köszi  :)
Cím: Re:MV C# probléma
Írta: ktomi Dátum 2014 február 25, 09:43:49 DÉLUTÁN
Üdv. Volna ismét egy kis problémám. Illetve több is...

1.  Hogyan lehet annak az oldalnak az URL címét lekérdezni és tárolni, ami épp meg van nyitva? (C#-ban készített saját browser, illetve más browser pl:chrome) ((ha egyáltalán lehetséges))
2. Azt tudom, hogy az egér pozícióját lehet módosítani, illetve az egér gombnyomásait is meg lehet csinálni kóddal. A kérdés pedig az lenne, hogy ez billentyűvel is megoldható? Ha igen, akkor hogyan?
3. Egy másik, háttérben futó programot hogyan lehet bezárni? (A c#-os programomtól független)
4. Van egy program (wow - worldserver.exe), ami újraindításnál egy hibaüzenetet dob, hogy váratlan módon leállt és addig nem indul újra, amíg rá nem nyomok a bezárás gombra. Ez a felugró ablaknak az észlelésére és automatikus bezárására nincs valami mód esetleg? ((Volna más felhasználási területe, csak azért szeretném ezt a megoldást, ha lehetséges))

Ne haragudjatok, hogy rabolom az időtöket a hülye kérdéseimmel. Aki esetleg ráér és tud ezekre megoldást, azt nagyon megköszönném :)
Cím: Re:MV C# probléma
Írta: kagebunshin Dátum 2014 február 26, 05:46:35 DÉLUTÁN
Üdv!

1. Saját browser esetén úgy gondolom semmi extra. Kell valamilyen közös tárolóhelyet választani. Egy fájlt vagy adatbázist ahol eltárolod az aktuális linket a másik program pedig kiolvassa onnan, esetleg valamilyen kommunikáció is felépíthető közöttük. Ha szükséges kifejtem részletesebben. Más browser esetén nem tudom létezik-e megoldás.

2. Billentyűzet leütést a SendKeys osztály SendWait metódusával lehet emulálni. Szükséges referencia: System.Windows.Forms.
példa:
SendKeys.SendWait("Q");

3. Program leállítására csak gyorsan rákerestem. Teszteltem ugyan de nem tudom mennyire lesz jó.
példa:
Process[] procs = Process.GetProcessesByName("calc");
foreach (Process p in procs)
    p.Kill();


4. Erre most így hirtelen nem tudk megoldást, de majd még gondolkodom rajta.
Cím: Re:MV C# probléma
Írta: ktomi Dátum 2014 február 27, 08:30:59 DÉLELŐTT
Oh, köszönöm szépen a segítséget! :)
Cím: Re:MV C# probléma
Írta: ktomi Dátum 2014 március 19, 01:17:04 DÉLELŐTT
-