【发布时间】:2011-02-25 04:09:50
【问题描述】:
如果在创建文件时出现问题,我一直在写入一个临时文件,然后移动到目的地。比如:
var destination = @"C:\foo\bar.txt";
var tempFile = Path.GetTempFileName();
using (var stream = File.OpenWrite(tempFile))
{
// write to file here here
}
string backupFile = null;
try
{
var dir = Path.GetDirectoryName(destination);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
Util.SetPermissions(dir);
}
if (File.Exists(destination))
{
backupFile = Path.Combine(Path.GetTempPath(), new Guid().ToString());
File.Move(destination, backupFile);
}
File.Move(tempFile, destination);
if (backupFile != null)
{
File.Delete(backupFile);
}
}
catch(IOException)
{
if(backupFile != null && !File.Exists(destination) && File.Exists(backupFile))
{
File.Move(backupFile, destination);
}
}
问题是在这种情况下新的“bar.txt”没有从“C:\foo”目录继承权限。但是,如果我通过资源管理器/记事本等直接在“C:\foo”中创建文件,则没有问题,所以我相信“C:\foo”上的权限设置正确。
更新
找到Inherited permissions are not automatically updated when you move folders,也许它也适用于文件。现在正在寻找一种强制更新文件权限的方法。有没有更好的方法来做到这一点?
【问题讨论】:
标签: c# windows-7 .net-4.0 file-permissions