Új hozzászólás Aktív témák
-
lord.lakli
őstag
válasz don_peter #7249 üzenetére
Ha már beolvasod az összeset, akkor mehet fapadosan Array.CopyTo segítségével is.
var osszefuzott = new byte[file1.Length + ... + file4.Length]
file1.CopyTo(osszefuzott, 0);
file2.CopyTo(osszefozott, file1.Length);
...Amikhez nem kell az összes fájlt beolvasni (néhány példa):
Sokkal szebb és nem kell egybe beolvasnod, ha MemoryStream.Write-al csinálod és a MemoryStream-re nyomsz egy ToArray()-t.Lehet List<byte>-al, mint amivel ajánlották. Ott tudsz Concat()-olni, vagy Linq-es Concat().
(#7250) ibenny:
Linq-nél nézz szét. Kérd be az összes file-t (*.*), majd Where feltételben megfogalmazni, hogy az általad megadott kiterjesztésű fájlok maradjanak csak. Kiterjesztés vizsgálatához: Path.GetExtension()[ Szerkesztve ]
-
don_peter
senior tag
Most lord-lakli javaslatára ezt tesztelem:
var osszefuzott = new byte[DataLenght]; // DataLenght értéke a 4 file mérete
rows.CopyTo(osszefuzott, 0);
rows2.CopyTo(osszefuzott, rows.Length);
rows3.CopyTo(osszefuzott, rows2.Length);
rows4.CopyTo(osszefuzott, rows3.Length);Ez után kipróbálom majd ezt ez, mert az első teszten már nem ment át a fentebbi kód.:
byte[] rv = new byte[a1.Length + a2.Length + a3.Length];
System.Buffer.BlockCopy(a1, 0, rv, 0, a1.Length);
System.Buffer.BlockCopy(a2, 0, rv, a1.Length, a2.Length);
System.Buffer.BlockCopy(a3, 0, rv, a1.Length + a2.Length, a3.Length);
Valamelyik csak jó lesz[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
Karma
félisten
válasz lord.lakli #7254 üzenetére
Pontosan ezt akartam kihozni belőle. Sőt megkockáztatom, hogy ha a kiírást is Streamen keresztül oldja meg, akkor nem is kell a négy fájlt felolvasni a memóriába teljes hosszában, előre.
[ Szerkesztve ]
“All nothings are not equal.”
-
don_peter
senior tag
Sajnos egyik megoldás sem volt jó, a for() ciklusos megoldásom működik, most teszteltem.
Most csak azt a részt tesztelem, hogy betöltöm a 4 fájlt, és for ciklusokkal mint amit fentebb is mutattam, és azonnal kiírom az összefűzött tömb tartamát egy fájlba.
A memória másolós nem működött sajnos, egyik sem.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz lord.lakli #7258 üzenetére
Fentebbi bejegyzésemben látható, mind két változatot kipróbáltam, és mind kettő 2MB felett nem másolt bele a tömbbe.
Onnan tudom, hogy nem jó, hogy összemásolás után azonnal kiírtam fájlba a tömb tartamát, és a 4 fajból csak kettő van meg a további 2 fáj tartama hiányzik, vagy csak nullák vannak helyettük..----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
ibenny
senior tag
Bocsánat, ez a válasz lord.laklinak szól:
Nagyon köszönöm, de tényleg nem tartok még ott, hogy ezen el tudjak indulni, de a segítségért hálás vagyok. :-) Egész hétvégén olvasgattam a témában, tényleg nem lehet egyszerűen kibővíteni plusz egy kiterjesztéssel a releváns sort? Ez azért lep meg ennyire, mert Python-ban leírtam, hogy if extension == '.kiterjesztes1' or extension == '.kiterjesztes2 then.., és működött is, még ciklus sem kellett hozzá.
Valószínűleg akkor hagyom ennyiben, de tényleg köszönöm..[ Szerkesztve ]
-
don_peter
senior tag
válasz lord.lakli #7264 üzenetére
A teljes fáj letöltést így csinálom:
// Teljes memória letöltése (8MB)
private void button13_Click(object sender, EventArgs e)
{
uint i = 0, Count = 1024 * 1024 * 8;
//byte[] FlashRom = new byte[1024*1024*8];
byte[] buffer = new byte[1];
serialPort1.Write("f"); // Küldünk egy parancsot (rom letöltési parancs)
string folderName = @"c:\DPTPFolder";
//string pathString = System.IO.Path.Combine(folderName, "SubFolder"); // További könyvtár
System.IO.Directory.CreateDirectory(folderName);
string fileName = "dptpsmfdcartridge_" + DateTime.Now.ToString("yMd_Hm") + ".bin";
string pathString = System.IO.Path.Combine(folderName, fileName);
if (!System.IO.File.Exists(pathString))
{
using (System.IO.FileStream fs = System.IO.File.Create(pathString))
{
while (true)
{
i++;
serialPort1.Read(buffer, 0, 1); // Várakozunk hardver adat küldésig
fs.WriteByte(buffer[0]);
if (i % 64 == 0)
{
serialPort1.Write("0");
i = 0;
Count = Count - 64;
}
if (Count <= 0)
{
break;
}
}
}
}
else
{
textBox1.Text += "Hiba a fájl kiírásában...(lehet, hogy létezik a fájl)" + "\r\n";
return;
}
textBox1.Text += "\r\n" + "Letöltés elkészült.\r\n";
textBox1.Text += "File name: " + folderName + "/" + fileName + "\r\n";
}
A memória másolásokat meg pontosan úgy mint feljebb mutattam./// Így is próbáltam
var osszefuzott = new byte[DataLenght]; // DataLenght értéke a 4 file mérete
rows.CopyTo(osszefuzott, 0);
rows2.CopyTo(osszefuzott, rows.Length);
rows3.CopyTo(osszefuzott, rows2.Length);
rows4.CopyTo(osszefuzott, rows3.Length);
// és így is:
byte[] rv = new byte[a1.Length + a2.Length + a3.Length+ a4.Length];
System.Buffer.BlockCopy(a1, 0, rv, 0, a1.Length);
System.Buffer.BlockCopy(a2, 0, rv, a1.Length, a2.Length);
System.Buffer.BlockCopy(a3, 0, rv, a1.Length + a2.Length, a3.Length);
System.Buffer.BlockCopy(a4, 0, rv, a1.Length + a2.Length + a3.Length, a4.Length);A fájlok betöltése pedig a klasszikus módon történik: (pl.: a 4-es fájl)
OpenFileDialog open4 = new OpenFileDialog();
open4.Title = "Open file";
open4.Filter = "Bin File (*.bin)|*.bin|MD File (*.md)|*.md|SMD File (*.smd)|*.smd|All Files (*.*)|*.*";
open4.FilterIndex = 2;
if (open4.ShowDialog() == DialogResult.OK)
{
rows4 = System.IO.File.ReadAllBytes(open4.FileName);
}A teljes kódot nem linkelem, mert több ezer soros, biztosan meg lehetne írni a feléből, de nem vagyok nagy mágus, inkább hardverprogramozással foglalkozom, ez csak szükséges +.
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
harylmu
őstag
string sourceFolderPath = @"forrásmappa";
string filePattern1 = @".kiterjesztes1";
string filePattern2 = @".kiterjesztes2";
string destinationFolderPath = @"celmappa";
List<string> matchingFiles = Directory.GetFiles(sourceFolderPath, "*", SearchOption.AllDirectories).Where(x=> x.EndsWith(filePattern1) || x.EndsWith(filePattern2)).ToList();
foreach (string filePath in matchingFiles)
{
var fileSpec = new FileInfo(filePath);
File.Move(filePath, Path.Combine(destinationFolderPath, fileSpec.Name));
}(#7265) don_peter:
Memória másolás:
A BlockCopy-s verziódnak mennie kéne. Ugyanez Array.Copy-val:var osszefuzott = new byte[DataLenght];
rows.CopyTo(osszefuzott, 0);
rows2.CopyTo(osszefuzott, rows.Length);
rows3.CopyTo(osszefuzott, rows.Length + rows2.Length);
ows4.CopyTo(osszefuzott, rows.Length + rows2.Length + rows3.Length);[ Szerkesztve ]
-
harylmu
őstag
válasz don_peter #7265 üzenetére
Ez meg egy overkill (mivel a BlockCopy-nak is működnie kéne), de pl nálam ez is üzemel:
byte[] rows = new byte[8] { 1, 1, 1, 1, 1, 1, 1, 1 };
byte[] rows2 = new byte[8] { 1, 1, 1, 1, 1, 1, 1, 1 };
byte[] rows3 = new byte[8] { 0,0,0,0,0,0,0,0 };
byte[] rows4= new byte[8] { 1, 1, 1, 1, 1, 1, 1, 1 };
var osszefuzott = new byte[rows.Length+rows2.Length+rows3.Length+rows4.Length];
using (MemoryStream ms = new MemoryStream(osszefuzott))
{
ms.Write(rows, 0, rows.Length);
ms.Write(rows2, 0, rows2.Length);
ms.Write(rows3, 0, rows3.Length);
ms.Write(rows4, 0, rows4.Length);
osszefuzott = ms.ToArray();
}[ Szerkesztve ]
-
lord.lakli
őstag
válasz don_peter #7265 üzenetére
Ha még nem használt függvényt hívsz mindenképpen nézd meg a leírását. CopyTo-nál második paraméter index, hogy hová másoljon. Te folyamatosan felül írtad. A korábbi példádban nem vettem észre a hibát
harylmu megírta a szebb MemoryStream-et is. Annyi apró módosítást tennék, hogy
var osszefuzott = new byte[rows.Length+rows2.Length+rows3.Length+rows4.Length];
helyett csakbyte[] osszefuzott;
legyen. Felesleges előre memóriát foglalni neki.(#7271) ibenny: ha több kiterjesztésre van szükséged, akkor pedig egy List<string>-be vedd fel és használd Contains függvényt Linq-ben.
[ Szerkesztve ]
-
lord.lakli
őstag
Erre a ToList-re gondolsz?
List<string> matchingFiles = Directory.GetFiles(sourceFolderPath, "*", SearchOption.AllDirectories).Where(x=> x.EndsWith(filePattern1) || x.EndsWith(filePattern2)).ToList();
Itt nem a string-re került a ToList, hanem a Linq IEnumerable-t ad vissza és az lett listává átalakítva, lehet tömbbé is alakítani, de lista egy csomó plusz szolgáltatást hordoz magában, amit a sima tömbnél nem tudsz kihasználni.
[ Szerkesztve ]
-
ibenny
senior tag
válasz lord.lakli #7274 üzenetére
Igen, erre gondoltam, köszönöm! Ettől függetlenül a sima tömb is használható lett volna ebben az esetben, string[] ... és egy hasonló LINQ-lekérdezés révén?
-
-
harylmu
őstag
Deferred execution egyébként érdekes téma. Akit érdekel, debugger-rel biggyesszen egy breakpoint-ot a foreach-re és lassan nyomogassa az F10-et, és nézze a konzol output:
string sourceFolderPath = $"C:\\Users\\{Environment.UserName}\\Desktop";
string filePattern1 = @".txt";
string filePattern2 = @".exe";
var matchingFiles = Directory.GetFiles(sourceFolderPath, "*", SearchOption.TopDirectoryOnly).Where(x =>{
Console.WriteLine($"executing now on {x}");
return x.EndsWith(filePattern1) || x.EndsWith(filePattern2);
});
foreach (string filePath in matchingFiles)
{
Console.WriteLine("one iteration in foreach");
Console.WriteLine(filePath);
}És nézze meg ugyanezt, ha .ToList()-et végére biggyeszt.
var matchingFiles = Directory.GetFiles(sourceFolderPath, "*", SearchOption.TopDirectoryOnly).Where(x =>{
Console.WriteLine($"executing now on {x}");
return x.EndsWith(filePattern1) || x.EndsWith(filePattern2);
}).ToList(); -
don_peter
senior tag
Köszönöm Uraim a segítséget, de figyelembe véve azt hogy mire is van szükségem, az álltalam megírt for() ciklusos megoldást választottam.
Az oka pedig igen egyszerű, a hardver amit fejlesztek csak korlátozott módon engedélyezi a címzéseket ezért minden olyan fájlt amely nem osztható (1024*1024)-el azt ki kell bővíteni, hogy osztható legyen, illetve minden olyan fájlt ami páratlan számú méretre jön ki (az egyet kivéve), teszem azt 3,5,7 azokat párosra kell bővítenem.
A for() ciklusban lehetőségem van mindezt figyelni és bővíteni, ha szükséges.Köszönöm a segítséget.
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
_kovi_
aktív tag
Sziasztok!
reg fájlt szeretnék hozzáadni a reg adatbázishoz, programkódból. Egy kedves fórumtagtól kaptam ezt a kódot, de nem csinál semmit.
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "reg.exe";
startInfo.Arguments = "import d:\\vdfreg15_64_bit.reg"; -
_kovi_
aktív tag
Lehet hogy console app-ként kéne projektben csinálni nem form-ba
-
sztanozs
veterán
A fájl létezik és olvasható? Hibaüzenet nincs?
Nem ártana feliratkozni az stdout és etderr streamekre...Nekem simán lefut, és berakja a reg fájl tartalmát a registrybe:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
startInfo.FileName = "reg.exe";
startInfo.Arguments = "import c:\\temp\\Skillport_TS.reg";
process.StartInfo = startInfo;
process.Start();
string strerr = process.StandardError.ReadToEnd();
string strout = process.StandardOutput.ReadToEnd();[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
-
biigi
tag
Sziasztok!
Segítséget szeretnék kérni az alábbi probléma megoldásában:
Adott egy osztály: allat és az néhány leszármazott osztály róka, medve...
ezek egy dll-ben vannak.
Wcf-en küldöm át ezeket egy List<allat> formában.
Ez mind addig működik ameddig az allat osztályban kiírom az xmlInclude(typeof(roka))... attributumokat, de
csak hogy jó legyen van egy másik dll-elem amiben még létezik néhány leszármazott pl. kutya
Ezt már nem tudom felvenni az állat osztály elé mert ez ott nem látható, és nem is szabad hogy ott látható legyen.
A kérdés az hogy hogyan tudom megodani hogy a List<allat> amiben már van kutya is az átmennyen a wcf-en.
Jelenleg nem várt típus hibát kapok.Kerestem erre megoldást de mindenhol csak azt találtam hogy adjam meg az extra type-okat a szerializáláskor paraméterként, de ez nekem nem jó mert wcf-nél ő csinálja meg a szerializációt én ebbe nem tudok belenyúlni.
Nagyon köszönök előre is minden tippet.
-
XP NINJA
őstag
Sziasztok. Objektum orientált programozást miből érdemes tanulni? Nem probléma az angol, de szeretném ha sok példa lenne benne. Köszönöm!
-
_kovi_
aktív tag
Sziasztok!
Az lenne a kérdésem, hogy ha összecsomagolom egyetlen exe-be a projeket, akkor a projekten belül a resources-be kell tenni minden fájlt? pl. a bat-okat, az .reg fájlokat amiket a program futtat.
Illetve ezt a kódon belül hogy adom meg, hogy ott keresse? Eddig pl d:\asd\asd.reg volt
Köszi!
-
martonx
veterán
-
_kovi_
aktív tag
-
harylmu
őstag
Nem hiszem hogy reg fájlt exébe tudnál csomagolni szimplán. Vagy egy installert akarsz vagy egy zip fájlt szerintem.
martonx arra gondolt, hogy van egy olyan dolog hogy current directory és ha relatív akarsz hivatkozni a fájlokra, akkor ahhoz képest kell nézned. a current directory valszeg pont maga az exe fájlt mappája lesz.
pl
C:\Program Files\Myprogram\core\program.exe
ha itt van egy fájl:
C:\Program Files\Myprogram\fajl.batakkor így kell rá hivatkozni:
..\fajl.bat -
fatal`
titán
-
sztanozs
veterán
Illetve .Net executable-t könnyen lehet memóriából indítani, de native windows exe-hez kell egy kis mókolás. C# megoldást nem találtam, ami megbízhatóan működik, de találtam sima c foráskódot.
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
togvau
senior tag
Udpclient receive-re mindenhol ipEndPointot írnak, de én ezt a visual studioba sehogy sem tudom aláhúzatlanná tenni...
new IPEndPoint alá van húzva, kiegészítés sincs, mintha egy ismeretlen dolog lenne.
Szóval hogy lehet működésre bírni?Az pedig tényleg komoly, hogy a VSE 2013 elkezdett kódra, és ctrl-space-re nem képes belőni a megfelelő
importotusingot magától?[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Xbox Series X|S
- Ford topik
- Skoda, VW, Audi, Seat topik
- Az MSI RadiX AXE6600 tesztje – router, játékosoknak
- Kerti grill és bográcsozó házilag (BBQ, tervek, ötletek, receptek)
- Ezek a OnePlus 12 és 12R európai árai
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- Milyen autót vegyek?
- Hálózati / IP kamera
- PlayStation 1 / 2
- További aktív témák...
- ZOTAC GeForce GTX 1080 AMP Edition 8GB GDDR5X 256bit
- Filmes gép gyűjtemény
- Nikon D5000 + AF-S DX NIKKOR 18-105 mm
- Bontatlan Seagate & Western Digital HDD-k 3TB - 12TB -ig - Számla + Garancia, Ár alatt! BeszámítOK!
- DJI Mini 4 pro FMC drón - 3 akku, RC2 táv, 2 táska, Filterek, 2025. decemberig garancia, DJI Care