0

私の問題は、パスのファイル名がDataTableからのものであるときにファイルにアクセスしようとすると、ファイルが見つからないことです。

テキストファイルからファイル名を解析するとき、または文字列にハードコードするときに、すでにテストしました...そしてもちろん、この作業>_<

DataTable からファイル名を文字列化するときに、差分がどこにあるかを取得しないでください。

構築する文字列は次のようになります。

C:\Server\system/somefile.dat

コードは次のとおりです。

    string accountConnectionString = ConfigurationManager.ConnectionStrings["connstring"].ConnectionString;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        LoadFileChecks();
    }

    public SqlConnection GetAccountConnection()
    {
        SqlConnection connection = new SqlConnection(accountConnectionString);
        connection.Open();
        return connection;
    }


    public DataTable getFilecheck()
    {
        using (var con = GetAccountConnection())
        {
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tFilecheck", con);
            DataTable ds = new DataTable("Filecheck");
            da.Fill(ds);
            con.Close();
            return ds;
        }
    }

    public void LoadFileChecks()
    {
        DataTable table = getFilecheck();
        string localPath = Application.StartupPath;

        foreach (DataRow row in table.Rows)
        {
            string line = row["sFilename"].ToString();

            string FilePath = localPath + "\\" + line;
            if (!File.Exists(FilePath))
            {
                MessageBox.Show("File not found");
                continue;
            }
        }

    }
4

2 に答える 2

0

まず、Application.StartupPathアプリケーション exe の展開方法によって異なります。

string localPath = Application.StartupPath;

デバッグ時の現在の実行パスになります (例: project\bin\Debug)

第二に、すべてのバックスラッシュをエスケープする必要はありません\\

サンプルの代わりに..

string path = "C:\\Server\\system";

でエスケープ文字列を試してください@

string path = @"C:\Server\system";

次にPath.Combineとファイル名

string fileName = row["sFilename"].ToString();
string filePath = Path.Combine(path, fileName); 
//Path.Combine(@"C:\Server\system", "somefile.dat");
于 2012-12-27T06:44:05.263 に答える
0

これは .net Web アプリケーションですか? はいの場合は、パスをサーバー パスに変更する必要があります。

path = Server.MapPath(path);
于 2012-12-27T06:50:25.763 に答える