C# asp.net浏览本地或任何驱动器以获取准确的文件路径
我被要求创建一个程序,用户可以从本地或任何网络驱动器浏览一些txt文件,用分隔符每行解析它,并将其存储在DB中。问题是我的代码无法获得确切的URL,相反,它返回安装应用程序解决方案的URL,因此返回的错误为“未找到文件”。我一直在环顾四周,我知道asp.net无法获得确切的文件路径,最好有文件上传。是否有一种方法可以在读取之前不必将其保存在解决方案文件夹/服务器中 我的代码是:C# asp.net浏览本地或任何驱动器以获取准确的文件路径,c#,asp.net,filepath,C#,Asp.net,Filepath,我被要求创建一个程序,用户可以从本地或任何网络驱动器浏览一些txt文件,用分隔符每行解析它,并将其存储在DB中。问题是我的代码无法获得确切的URL,相反,它返回安装应用程序解决方案的URL,因此返回的错误为“未找到文件”。我一直在环顾四周,我知道asp.net无法获得确切的文件路径,最好有文件上传。是否有一种方法可以在读取之前不必将其保存在解决方案文件夹/服务器中 我的代码是: protected void btnUploadSave_Click(object sender, EventArgs
protected void btnUploadSave_Click(object sender, EventArgs e)
{
string path =
string.Format(
CultureInfo.InvariantCulture,
Strings.NewObjectPath,
_root,
fuUpload.FileName);
//string x = fuUpload.PostedFile.FileName;
OpenFile(path);
}
它返回路径,但不返回项目的实际位置。
实际位置是c:\my docs\download\someFile.txt,它返回c:\my docs\vs 2010\Project\myAppSoltn\someFile.txt
如果由于安全问题而无法获得确切的文件位置,是否有一种方法可以只知道文件名就打开文件?下面的lcode不起作用,但我想得到类似的东西
private void OpenFile(String path)
{
path = @"~\someFile.txt";
// Delete the file if it exists.
AirDataAccess access = new AirDataAccess();
using (TextFieldParser parser = new TextFieldParser(path))
{
parser.Delimiters = new string[] { "," };
while (true)
{
string[] words = parser.ReadFields();
if (words == null)
break;
else
{
AirData airData = null;
if (words != null)
{
airData = new AirData();
airData.DateAired = Convert.ToDateTime(words[0]);
if (adBusiness.isValidUniqueCode(airData.UniqueCode))
access.InsertAirData(airData);
}
}
}
}
}
这是myp页面:
<asp:View ID="vUpload" runat="server">
<asp:Panel ID="pnlUpload" runat="server" DefaultButton="btnUploadSave">
<table border="0" cellpadding="5" cellspacing="0">
<thead>
<tr>
<td class="header">Upload a File</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<asp:RequiredFieldValidator ID="rfvUpload" runat="server" ErrorMessage="A file name is required" ControlToValidate="fuUpload" SetFocusOnError="true">* </asp:RequiredFieldValidator>
<asp:FileUpload ID="fuUpload" runat="server" CssClass="button" Width="400px" />
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td align="right">
<asp:Button ID="btnUploadCancel" runat="server" CausesValidation="false" CssClass="button" Text="Cancel" UseSubmitBehavior="false" onclick="Cancel" />
<asp:Button ID="btnUploadSave" runat="server" CssClass="button" Text="Upload" onclick="btnUploadSave_Click" />
</td>
</tr>
</tfoot>
</table>
</asp:Panel>
</asp:View>
上传文件
*
是否可以TextFieldParser
将流作为输入?还是流阅读器
如果它可以接受一个流,您可以在OpenFile
方法中使用这一行:
using (TextFieldParser parser = new TextFieldParser(fuUpload.PostedFile.InputStream))
这样,您就不必在处理文件之前将其保存到服务器
但如果TextFieldParser
仅对文件起作用,则可以将上载的文件保存在临时文件中,然后删除:
string tempFileName = System.IO.Path.GetTempFileName();
fuUpload.PostedFile.SaveAs(tempFileName);
// process your file
System.IO.File.Delete(tempFileName);
您的代码在服务器端执行,无法到达客户端。正确的方法是用文件字段表示HTML表单。用户将使用此字段将文件上载到服务器。您的意思是使用FileUpload标记吗?请看我的编辑。抱歉,新加入asp.net。你有我可以阅读的链接吗?感谢感谢它没有让我保存在磁盘上就读取了文件。