別のビジネス プロセスがいずれかのファイルに読み取り専用フラグを設定していたため、ファイルのコピーに問題がありました。ソースには触れたくありませんでしたが、常に宛先を読み取り/書き込みとして持っていました。
シンプルなコンソール アプリに切り詰めたコードは次のとおりです。
using System.IO;
namespace TrialConsole
{
class Program
{
static void Main(string[] args)
{
string fileSrc = "Src.txt";
string fileDest = "Dest.txt";
FileInfo destFileInfo = new FileInfo(fileDest);
if (destFileInfo.Exists && destFileInfo.IsReadOnly)
destFileInfo.IsReadOnly = false;
Directory.CreateDirectory(destFileInfo.DirectoryName);
(new FileInfo(fileSrc)).CopyTo(fileDest, true);
destFileInfo.IsReadOnly = false;
}
}
}
これを実行するには、作業ディレクトリに Src.txt を作成する必要もあります。
これを最初に実行すると、何も起こらないようです。Dest.txt は表示されません。2回目は、宛先ファイルが読み取り専用であると不平を言います。
エクスプローラーで隠しファイルとシステム ファイルを表示したときだけ、Dest.txt が表示されましたが、属性 HSAO が設定されていました (O は NTFS でオフラインを意味します)。
これらの追加の属性が設定されているのはなぜですか? どうすれば修正できますか?