MV C# probléma

Indította ktomi, 2014 január 06, 01:04:33 DÉLELŐTT

Előző téma - Következő téma

ktomi

Ü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?

Szilárd

Ü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

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
Java / C# / Swift Programmer

Apple
----------
OS X / iOS User
iPhone 6 Plus
iPad Air 2
MacBook Pro 13" Retina

ktomi

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.

kagebunshin

Ü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 :)
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

ktomi

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?

kagebunshin

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.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

ktomi


ktomi

Ü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 :)

kagebunshin

Ü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.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

ktomi

Oh, köszönöm szépen a segítséget! :)

ktomi

#10
-

Powered by EzPortal