0

ユーザーがローカルまたは任意のネットワーク ドライブからいくつかの txt ファイルを参照し、区切り記号を使用して行ごとに解析し、DB に保存できるプログラムを作成するように依頼されました。問題は、私のコードが正確な URL を取得できないことです。代わりに、アプリのソリューションがインストールされている URL を返すため、ファイルが見つからないというエラーが返されます。私は周りを見回しており、asp .netが正確なファイルパスを取得できないことを認識しています。ファイルのアップロードが最適です。読み取る前にソリューション フォルダー/サーバーに保存する必要がない方法はありますか?

私のコードはこれです:

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">*&nbsp;</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>
4

1 に答える 1

0

入力としてTextFieldParseraを使用できますか? StreamそれともStreamReader

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);
于 2013-03-30T13:59:55.417 に答える