2009-04-14 7 views
3

Toute aide serait appréciée, j'essaie de convertir le code ci-dessous en C#, je n'ai jamais utilisé VB.NET alors ReDim est un nouveau pour moi.C# Aide convertir ce code de VB.NET en C#

Merci

Dim inFile As System.IO.FileStream 
Dim binaryData() As Byte 
Dim strFileName As String 

strFileName = "C:\MyPicture.jpeg" 

inFile = New System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read) 

''//Retrive Data into a byte array variable 
ReDim binaryData(inFile.Length) 
Dim bytesRead As Long = inFile.Read(binaryData, 0, CInt(inFile.Length)) 
inFile.Close() 

Répondre

10

Le code peut être converti in extenso, mais il est un moyen d'atteindre beaucoup plus facile ce que cela fait (lire tous les octets d'un fichier), soit

var binaryData = File.ReadAllBytes(strFileName); 

Personnellement, je renommer strFileName juste fileName comme la notation hongroise est désapprouvée dans le code .NET ... mais c'est une autre affaire!

+0

+1 pour la bonne réponse. – Brian

+0

Remarque: Dans les anciennes versions de .Net, remplacez "var" par "byte []". – Brian

+0

@Brain: Non, dans le compilateur pré-C# 3.0, remplacez var par byte []. – Samuel

0

ReDim est utilisé est des tableaux de redimensionnement. (Vous pouvez conserver le contenu si on le souhaite également ce code ne fait pas.)

2

Je crois que l'instruction ReDim est juste utilisé pour initialiser le tableau:

byte[] binaryData; 

binaryData = new byte[inFile.Lenght]; 
1

ReDim réaffecte le tableau. La plupart du temps, c'est une odeur de code: un symptôme ou un type de collection plutôt qu'un tableau. Ce code doit faire ce que vous voulez:

string FileName = @"C:\MyPicture.jpeg"; 
byte[] binaryData; 
long bytesRead; 

using (var inFile = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)) 
{ 
    binaryData = new byte[inFile.Length]; 
    bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length); 
} 
//I'm assuming you're actually doing something with each byte array here 
+0

@Joel - même c'est un peu une odeur; il n'est pas prudent de supposer qu'un flux lira autant de données que demandé; même pour les cas simples, une boucle (vérifiant le retour de Read) est * techniquement * nécessaire. La plupart des flux (y compris FileStream) pardonnent à ce sujet - mais pas tous. –

+0

Ouais: le corrige afin que bytesRead soit toujours dans la portée après l'instruction using. –

2

Eh bien, le plus proche traduction serait:

binaryData = new byte[inFile.Length]; 

car il n'a pas été affecté, ou:

Array.Resize(ref binaryData,inFile.Length); 

si avait été précédemment attribué. Cependant, le code lui-même est très dangereux (vous ne devez pas supposer que Read lit toutes les données demandées); une approche beaucoup plus simple est ici:

binaryData = File.ReadAllBytes(strFileName); 
3

Ceci est très facile à convertir en C#.

FileStream inFile; 
byte[] binaryData; 
string strFileName; 

strFileName = @"C:\MyPicture.jpeg"; 

inFile = new System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); 

binaryData = new byte[inFile.Length]; 
int bytesRead = inFile.Read(binaryData, 0, binaryData.Length); 
inFile.Close(); 

Mais il existe une bien meilleure façon de l'écrire.

string fileName = @"C:\MyPicture.jpeg"; 
byte[] binaryData = File.ReadAllBytes(fileName);