J'ai une application web hébergée sur intranet où l'utilisateur va télécharger un fichier texte avec des données délimitées par des espaces dans 5 colonnes. Je ne souhaite pas sauvegarder le fichier alors je voulais juste l'utiliser en mémoire. J'ai essayé plusieurs exemples différents sur le web et aucun n'a fonctionné. Enfin, un collègue m'a montré comment faire cela. Voici le code et je me demande s'il y a une meilleure façon de le faire. En fin de compte, tout ce que je veux, c'est un moyen de lier les données à une grille ou un répéteur pour l'affichage et le stockage ultérieur dans une base de données (SQL Server).Téléchargement de fichier lu en mémoire et utilisé comme fichier texte - existe-t-il un meilleur moyen?
La balise asp fichier de téléchargement ID est SurveyFileUpload
Le SurveyDate est un aspic: champ de saisie
Int32 fileLen = SurveyFileUpload.PostedFile.ContentLength;
// Create a byte array to hold the contents of the file.
Byte[] buffer = new Byte[fileLen];
// Initialize the stream to read the uploaded file.
Stream s = SurveyFileUpload.FileContent;
// Read the file into the byte array.
s.Read(buffer, 0, fileLen);
// Convert byte array into characters.
ASCIIEncoding enc = new ASCIIEncoding();
string str = enc.GetString(buffer);
testReadFile(str, db_surveyDate.Text);
protected void testReadFile(string inFileString, string inSurveyDate)
{
string[] lines = inFileString.Split('\n');
curFileListing.InnerHtml = "";
int curRow = 1;
var readings = from line in lines
select new
{
// this is just for display purposes to show the number of rows on the page
Row = curRow++,
SurveyDate = inSurveyDate,
ItemNumber = Regex.Split(line, "[ ]+")[0],
Northing = Regex.Split(line, "[ ]+")[1],
Easting = Regex.Split(line, "[ ]+")[2],
Elevation = Regex.Split(line, "[ ]+")[3],
Name = Regex.Split(line, "[ ]+")[4]
};
saveFileData.Visible = true;
GridView fileData = new GridView();
fileData.DataSource = readings;
fileData.DataBind();
fileData.AlternatingRowStyle.BackColor =
System.Drawing.ColorTranslator.FromHtml("#eee");
curFileListing.Controls.Add(fileData);
}
Cela fonctionne bien. Je ne connais pas bien LINQ et j'ai eu du mal avec la partie du flux de fichiers.