Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 8 van 8

Onderwerp: Custom Stream wilt niet lezen van buffer

  • Vraag is opgelost
  1. #1

    Question Custom Stream wilt niet lezen van buffer

    Hallo allemaal!

    Ik heb een stream gemaakt die een een zelfgemaakte class behandeld, (eerste keer dat ik zelf een stream implementatie maak)
    in de zelfgemaakt class heb ik een buffer zitten waar naartoe geschreven en gelezen moet worden als je de StreamWriter en StreamReader gebruikt.

    Nu de StreamWriter werkt maar als ik wil lezen krijg ik altijd niets terug.

    Test code zodat je weet wat ik met het bovenstaande bedoel:
    Code:
    POFile file = POFile.Create(@"ROOT:\\Libraries\Pictures\test.png");
    StreamWriter sw = new StreamWriter(file.GetStream(), Encoding.Default);
    sw.WriteLine("Dit is een test");
    sw.Close();
    
    Console.WriteLine(file.ReadAllText()); //Dit geeft 'Dit is een test' terug
    //Maar als ik dit gebruik:
    
    StreamReader sr = new StreamReader(file.GetStream(), Encoding.Default);
    Console.WriteLine(sr.ReadToEnd()); //Dit is leeg
    sr.Close();
    POFile.cs:
    Code:
    public class POFile
    {
        private String _name;
        public String Name
        {
            get { //... }
            set { //... }
        }
    
        private String _fullFileName;
        public String FullFileName 
        {
            get { //... }
            set { //... }
        }
    
        private Byte[] _raw = new Byte[0];
        private Byte[] Raw
        {
            get { return _raw; }
            set { _raw = value; }
        }
    
        public Stream GetStream()
        {
            POStream mem = new POStream(this);
            return mem;
        }
    
        public Byte[] ReadAllBytes() { //... }
    
        public String ReadAllText() { //... }
    
        public void Write(String text) { //... }
    
        public void Write(Byte[] raw) { //... }
    
        public void AppendWrite(String text) { //... }
    
        public void AppendWrite(Byte[] raw) { //... }
    
        private static String GetPathWithoutFile(String[] s) { //... }
    
        private static POFile Searcher(PODirectory currDir, String fullPath, String name, Boolean create) { //... }
    
        public static POFile Open(String path) { //... } 
    
        public static POFile Create(String path) { //... }
    }
    POStream.cs:
    Code:
    public class POStream : MemoryStream
    {
        private POFile file;
    
        public POStream(POFile file)
            : base()
        {
            if (file == null)
                throw new ArgumentNullException("file", "The file cannot be null.");
    
            this.file = file;
        }
    
        public POStream(String path)
            : base()
        {
            if (path == null)
                throw new ArgumentNullException("path", "The path cannot be null.");
    
            if (path == "")
                throw new ArgumentException("The path cannot be empty", "path");
    
            this.file = POFile.Create(path);
        }
    
        public override void Flush()
        {
            file.Write(this.GetBuffer());
            base.Flush();
        }
    }
    Bedankt
    Laatst aangepast door MatthiWare : 20 juli 2012 om 13:11 Reden: info :D
    Mvg,
    Matthiee' van MatthiWare
    (Je mag me altijd toevoegen op skype)
    Terraria (Visual Basic Version)

  2. #2
    Senior Member
    Geregistreerd
    7 februari 2012
    Locatie
    Limburg
    Flush je stream writer eens na je WriteLine

  3. #3
    @Bloodshed,

    Ik kan schrijven maar het is lezen dat niet gaat.
    En als ik de Close methode gebruikt van de streamwriter flushd hij ook.
    Mvg,
    Matthiee' van MatthiWare
    (Je mag me altijd toevoegen op skype)
    Terraria (Visual Basic Version)

  4. #4
    Senior Member
    Geregistreerd
    7 februari 2012
    Locatie
    Limburg
    Ik had even een voorbeeld gemaakt voor mijzelf, maar ik sloot de stream achteraf.

    Als je niet perse een stream writer of reader hoeft te gebruiken:

    Code:
    string data = Encoding.Default.GetString(file.GetStream().GetBuffer());
    of als deze data in je Raw property zit
    Code:
    string data = Encoding.Default.GetString(file.Raw);
    Anders kun je misschien een voorbeeld console projectje maken, ik heb zelf een test gemaakt waar werkt het wel werkte. Maar waarschijnlijk niet zoals jij gebruikt.


    Anders: debuggen helpt je ook niet verder? Kijken of de 2e GetStream() wel goed werkt omdat je een nieuwe stream maakt bij elke GetStream() etc

  5. #5
    Ik weet dat ik niet perse een streamwriter/streamreader hoef te gebruiken, je kan de schrijf en lees functies van de POFile zelf gebruiken (deze werken wel).
    Maar dit is een plugin applicatie met een zelfgemaakte extensie van .Net die bepaalde onderdele van .Net heeft aangepast voor beter werking als je een plugin wilt maken.
    Dus heb ik liever dat je nog zo veel mogelijk de standaard codes kunt gebruiken (streamwriter/reader).

    Oke ik heb eventjes getest met een private stream te maken in de POFile en dan via de GetStream() methode te kijken of hij null was en dan een nieuwe instantie maken, en de stream terugkeren.
    Maar als ik dan teste kreeg ik een ArgumentException: de stream is niet leesbaar en als ik de code die hierbove sta gebruik krijg ik deze exception niet maar krijg ik een lege string terug.

    Als ik debug zie ik dat de waardes van raw in de POFile nog altijd bestaan maar als ik kijk naar de StreamReader staat de eigenschap 'EndOfStream' als direct op true.
    En de charBuffer en byteBuffer in de streamreader zijn bijde leeg voor en na het proberen lezen.

    Ik post direct een voorbeeld met source code (nog ffjes aan het maken)
    Laatst aangepast door MatthiWare : 21 juli 2012 om 00:21 Reden: source info
    Mvg,
    Matthiee' van MatthiWare
    (Je mag me altijd toevoegen op skype)
    Terraria (Visual Basic Version)

  6. #6
    Senior Member
    Geregistreerd
    7 februari 2012
    Locatie
    Limburg
    Kun je eens proberen je writer ipv Close alleen te Flushen? Even de Close commenten.

    (Als je teamviewer hebt zou handig zijn voor meekijken ofzo)

  7. #7
    Ik heb eens getest met alleen te flushen maar dat werkt ook niet (lege string)

    En ja ik heb TeamViewer (ff beveiligings update download)

    Ga bij meetings en vul deze ID in : m91-420-005
    Laatst aangepast door MatthiWare : 21 juli 2012 om 00:39
    Mvg,
    Matthiee' van MatthiWare
    (Je mag me altijd toevoegen op skype)
    Terraria (Visual Basic Version)

  8. #8
    of voeg me toe als contactpersoon op teamviewer

    Id: 432 605 456
    Mvg,
    Matthiee' van MatthiWare
    (Je mag me altijd toevoegen op skype)
    Terraria (Visual Basic Version)

Berichtenregels

  • U mag geen nieuwe discussies starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • Umag niet uw berichten bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Linkpartners
Aanbiedingen