web-dev-qa-db-ja.com

サーバーマシン上で実行されているWebAPIアプリからサーバーマシン上のフォルダーにファイルを書き込むことはできますか?

Web APIアプリに、CSVファイルに書き込むための次のコードがあります。

private void SaveToCSV(InventoryItem invItem, string dbContext)
{
    string csvHeader = "id,pack_size,description,vendor_id,department,subdepartment,unit_cost,unit_list,open_qty,UPC_code,UPC_pack_size,vendor_item,crv_id";

    int dbContextAsInt = 0;
    int.TryParse(dbContext, out dbContextAsInt);
    string csvFilename = string.Format("Platypus{0}.csv", dbContextAsInt);

    string csv = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12}", invItem.ID,
        invItem.pksize, invItem.Description, invItem.vendor_id, invItem.dept, invItem.subdept, invItem.UnitCost,
        invItem.UnitList, invItem.OpenQty, invItem.UPC, invItem.upc_pack_size, invItem.vendor_item, invItem.crv_id);

    string existingContents;
    using (StreamReader sr = new StreamReader(csvFilename))
    {
        existingContents = sr.ReadToEnd();
    }

    using (StreamWriter writetext = File.AppendText(csvFilename))
    {
        if (!existingContents.Contains(csvHeader))
        {
            writetext.WriteLine(csvHeader);
        }
        writetext.WriteLine(csv);
    }
}

開発マシンでは、csvファイルはデフォルトで「C:\ ProgramFiles(x86)\ IISExpress」に保存されます。最終的な休憩/作業場所に展開するときの準備として、ファイルをサーバーの「Platypi」フォルダーなどに保存するために何をする必要がありますか?何か特別なことはありますか? 「カモノハシ」への書き込みを許可するために、特定のフォルダー柿を特別に設定する必要がありますか?

この行を変更するだけの問題ですか?

string csvFilename = string.Format("Platypus{0}.csv", dbContextAsInt);

...これに:

string csvFilename = string.Format(@"\Platypi\Platypus{0}.csv", dbContextAsInt);

9
B. Clay Shannon

IISフォルダーの場合、アプリケーションにはそこに書き込む権限があります。App_Dataフォルダーにファイルを書き込むことをお勧めします。

IISアプリケーションフォルダーの外にファイルを保存する場合は、IISアプリケーションプール(デフォルトではNETWORKSERVICEだと思います)のサービスアカウントを指定する必要があります)そのフォルダに対する適切な権限。

B. Clay Shannonの要求に応じて、私の実装:

string fullSavePath = HttpContext.Current.Server.MapPath(string.Format("~/App_Data/Platypus{0}.csv", dbContextAsInt));
15
Patrick Hofman

PatrickHofmanに感謝します。これは私が使用している正確なコードであり、プロジェクトのApp_Dataフォルダーに保存されます。

public static string appDataFolder = HttpContext.Current.Server.MapPath("~/App_Data/");
. . .
string csvFilename = string.Format("Platypus{0}.csv", dbContextAsInt);
string fullSavePath = string.Format("{0}{1}", appDataFolder, csvFilename);
3
B. Clay Shannon