私は小さなXMLデータファイルを外付けドライブに保存してきましたが、問題はありません。しかし、それから私はApplicationDataフォルダーなどを使おうとしましたが、C:\でさえもうまくいきませんでした。 「パス「C:\」へのアクセスが拒否されました」などのエラーが発生します。
確認のために、ファイルが作成され、現在のコードで外部ドライブに正常に読み取られます。これはセキュリティと権限に関係していると思いますが、あまり便利なものは見つかりませんでした。
これを正しい方向に向けていただければ幸いです。
string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml"; // external drive ok :-)
//string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
//string fipData = @"C:\";
// if the XML data file doesn't exist, create it
bool dataFileExists = File.Exists(fipData);
if (dataFileExists)
{
// read the XML values
XDocument xData = XDocument.Load(fipData);
//...
}
else
{
// create & save the XML data file
XElement xLastPath = new XElement(el_lastPath, "");
XElement xLastCode = new XElement(el_lastCode, "");
XElement xRoot = new XElement(el_root);
xRoot.Add(xLastPath);
xRoot.Add(xLastCode);
XDocument newDataFile = new XDocument();
newDataFile.Add(xRoot);
try
{
newDataFile.Save(fipData);
}
catch (Exception ex)
{
MessageBox.Show("Data file unable to be created. System message:{0}".Put(Environment.NewLine + Environment.NewLine + ex.Message));
}
}
別の回答へのコメントでは、これはデスクトップアプリケーションであると言っているので、各場所を個別に扱いましょう。
Vista以降では、一般ユーザーはシステムドライブのルートディレクトリ(通常はC :)にファイルを作成する権限がありません。エクスプローラーでC:\を開き、右クリックしてファイルを作成しようとすると、これを自分で確認できます。UACプロンプトが表示されます。したがって、C:\に書き込みたい場合、アプリケーションは管理者として、適切なマニフェスト要求の昇格を介して、またはその場所に書き込みたいときに別のプロセスを開始することによって実行する必要があります。
ただし、アプリケーションデータ、Environment.SpecialFolder.ApplicationDataは機能するはずです。何を返す実際のディレクトリを出力する場合、何を取得しますか?
アプリケーションがローカルドライブにアクセスできないユーザーのコンテキストで実行されている必要があることを想像するだけです。匿名IISアカウントまたは関連するネットワークの場所にのみアクセスできるサービスアカウントで実行されているASP.NET Webサイト。
ほとんどの場合、外付けドライブはFATでフォーマットされています。 FATはユーザーの権利管理をサポートしていないため、そこに保存しても問題ありません。
それに加えて、IISユーザーは、すでに述べたAdamのような他のフォルダに対する権限を持っていません