Ü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?
Ü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:
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
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.
Ü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 :)
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?
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.
Remek! Köszi :)
Ü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 :)
Ü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.
Oh, köszönöm szépen a segítséget! :)
-