Upload de arquivo lido na memória e usado como arquivo de texto - existe uma maneira melhor?
Eu tenho um aplicativo da web hospedado na intranet onde o usuário fará o upload de um arquivo de texto com dados delimitados por espaço em 5 colunas. Eu não quero salvar o arquivo, então eu queria apenas usá-lo na memória. Eu tentei muitos exemplos diferentes fora da web e nenhum funcionou. Finalmente, um colega de trabalho me mostrou como fazer isso. Aqui está o código e eu estou querendo saber se existe uma maneira melhor de fazer isso. No final, tudo que eu quero é uma maneira de vincular os dados a um gridview ou repetidor para visualização e posterior armazenamento em um banco de dados (SQL Server).
O ID da tag asp do arquivo de upload é SurveyFileUpload
O SurveyDate é um campo asp: input
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);
}
Isso funciona bem. Eu não sou tão experiente com o LINQ e tive dificuldades com a parte do fluxo de arquivos.