| 

.NET C# Java Javascript Exception

1
Ich bin noch auf dem Stand von VB6. Habe aber immerhin eine funktionierende "APP" für mein Windows-Phone mit derzeit schon über 3000 Zeilen gebastelt.

Public Zahl(100, 50) As Byte möchte ich in den Isolated Storage speichern
und später wieder laden können.

Ich weiß, dass ich OOP, String-Klasse, etc. lernen sollte. Aber ich möchte erst einmal mein gebasteltes Programm schnell fertig bekommen und bitte Euch deswegen um Hilfe.

Danke
Klapauzius
News:
09.11.2012
Klapauzius 3 4
3 Antworten
1
Hallo Klapauzius

Ich habe leider kein VB-Express installiert, so dass der Code in C# geschrieben ist.
Solltest du beim Übersetzen Hilfe brauchen, melde dich im Forum!
Du bist dir sicher bewusst, dass nur Werte von 0 - 127 sicher wieder erstellt weden können.

using System;
using System.IO;
using System.IO.IsolatedStorage;

namespace ConsoleApplication1
{
class Program
{

static void Main(string[] args)
{
IsoStorage _isoStorage = new IsoStorage("StoredArray.txt");
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

byte[] numbres = { 100, 50, 25, 0 };

// Die Byt anzeigen
for (int i = 0; i < numbres.Length; i++) {
Console.WriteLine(numbres[i].ToString());
}

// Byt in String umwandeln
string allNumbres = enc.GetString(numbres);

// Den string in die IsoStor schreiben
_isoStorage.IsoValue = allNumbres;

// String aus IsoStor holen und in BytArray umwandeln
byte[] bytFromString = enc.GetBytes(_isoStorage.IsoValue);

// Die Byt zum vergleich nochmals anzeigen
Console.WriteLine();
Console.WriteLine("Die rekonstruirten Byt anzeigen");
for (int i = 0; i < bytFromString.Length; i++) {
Console.WriteLine(bytFromString[i].ToString());
}

Console.ReadLine();
}
}

public class IsoStorage
{
private IsolatedStorageFile _isoStor;
private string _fileName;

public IsoStorage(string fileName)
{
_fileName =fileName;
_isoStor = IsolatedStorageFile.GetMachineStoreForAssembly();
}

public string IsoValue
{
get
{
if (_isoStor.FileExists(_fileName))
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(_fileName, FileMode.OpenOrCreate, _isoStor))
{
using (StreamReader reader = new StreamReader(isoStream ))
{
return reader.ReadToEnd();
}
}
}
else
{
throw new Exception("FileNotfoundException");
}
}
set
{
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(_fileName, FileMode.OpenOrCreate, _isoStor))
{
using (StreamWriter writer= new StreamWriter(isoStream))
{
writer.Write(value);
}
}

}
}
}
}
10.11.2012
Maendler 214 1 7
EDIT: In Code-Beispielen muss als \[i] oder [ i] geschrieben werden, sonst wird es als Kursiv-Formatierung interpretiert (eine Besonderheit (=Bug oder Feature) von codekicker). Habe das korrigiert.

@Klapauzius: schau mal über Deinen VB-Code drüber. Mir scheint, die [i]-Stellen fehlen bei Dir auch.
Matthias Hlawatsch 11.11.2012
0
Hallo Maendler,

herzlichen Dank für Deine schnelle und umfassende Antwort!!! Das übersetzen in VB.NET ist kein Problem (http://www.carlosag.net/tools/codetranslator/) brachte das im Anhang nachfolgende Ergebnis (Vielleicht kann die VB.NET Version ja noch jemand brauchen).
Jetzt werde ich mich über's Wochenende dransetzen und das Programm durcharbeiten.

Nochmals Danke und besten Gruß
Klapauzius

----------------------------------------------------------------------------------------

Imports System
Imports System.IO
Imports System.IO.IsolatedStorage

Namespace ConsoleApplication1

Class Program

Private Shared Sub Main(ByVal args() As String)
Dim _isoStorage As IsoStorage = New IsoStorage("StoredArray.txt")
Dim enc As System.Text.ASCIIEncoding = New System.Text.ASCIIEncoding
Dim numbres() As Byte = New Byte() {100, 50, 25, 0}
' Die Byt anzeigen
Dim i As Integer = 0
Do While (i < numbres.Length)
Console.WriteLine(numbres.ToString)
i = (i + 1)
Loop
' Byt in String umwandeln
Dim allNumbres As String = enc.GetString(numbres)
' Den string in die IsoStor schreiben
_isoStorage.IsoValue = allNumbres
' String aus IsoStor hohlen und in BytArray umwandeln
Dim bytFromString() As Byte = enc.GetBytes(_isoStorage.IsoValue)
' Die Byt zum vergleich nochmals anzeigen
Console.WriteLine
Console.WriteLine("Die rekonstruirten Byt anzeigen")
Dim i As Integer = 0
Do While (i < bytFromString.Length)
Console.WriteLine(bytFromString.ToString)
i = (i + 1)
Loop
Console.ReadLine
End Sub
End Class

Public Class IsoStorage

Private _isoStor As IsolatedStorageFile

Private _fileName As String

Public Sub New(ByVal fileName As String)
MyBase.New
_fileName = fileName
_isoStor = IsolatedStorageFile.GetMachineStoreForAssembly
End Sub

Public Property IsoValue As String
Get
If _isoStor.FileExists(_fileName) Then
Dim isoStream As IsolatedStorageFileStream = New IsolatedStorageFileStream(_fileName, FileMode.OpenOrCreate, _isoStor)
Dim reader As StreamReader = New StreamReader(isoStream)
Return reader.ReadToEnd
Else
Throw New Exception("FileNotfoundException")
End If
End Get
Set
Dim isoStream As IsolatedStorageFileStream = New IsolatedStorageFileStream(_fileName, FileMode.OpenOrCreate, _isoStor)
Dim writer As StreamWriter = New StreamWriter(isoStream)
writer.Write(value)
End Set
End Property
End Class
End Namespace
10.11.2012
Klapauzius 3 4
Achtung!

Durch die automatische Übersetzung ging in der Property IsoValue die Usings verloren.

Diese müssen noch implementiret werden, weil sonsts die IsolatedStorageFileStream und oder der Reader, Writer nicht geschlossen werden.

[code]
Using isoStream as IsolatedStorageFileStream = New IsolatedStorageFileStream(_fileName, FileMode.OpenOrCreate, _isoStor)
Using writer As StreamWriter = New StreamWriter(isoStream)
writer.Write(value)
End Using
End Using
[/code]
Maendler 11.11.2012
0
Danke nochmal Maendler.
Danke auch an Matthias Hlawatsch für den - Stellen Hinweis) /ab jetzt also kursiv :-)

Das ist jetzt erst einmal genug Material für mich um das Problem durchzuarbeiten!

Nur zur Info: Wie ich leider feststellen musste, unterstützt das Framework auf der
Windows Phone Plattform die ASCIIEncoding()-Methode NICHT. Hierfür habe ich bereits
andere Lösungsmöglichkeiten im Netz gefunden. Die will ich aber jetzt nicht hier
einstellen, weil ich wie schon gesagt, erst alles aufarbeiten (bzw. lernen) muss.
11.11.2012
Klapauzius 3 4

Stelle deine Windows-Frage jetzt!