代码在本地Windows 2008上运行正常,但无法在Azure云上的应用程序数据中创建子文件夹
本文关键字:云上 应用程序 Azure 文件夹 创建 数据 2008 Windows 运行 代码 | 更新日期: 2023-09-27 18:02:17
我的程序需要在"%AllUsersProfile%'Application Data' stuff "中存储东西(取决于我无法更改的代码)。我使用以下代码递归地创建一个文件夹:
class DirCreator {
internal static void Create( String path )
{
create( new DirectoryInfo( path ) );
}
void create( DirectoryInfo info )
{
String path = info.FullName;
if( Directory.Exists( path ) ) {
return;
}
if( info.Parent != null ) {
create( info.Parent );
}
Directory.CreateDirectory( path );
}
}
,调用者代码执行以下操作:
String appData = Environment.GetFolderPath(
Environment.SpecialFolder.CommonApplicationData );
Creator.Create( Path.Combine( appData, "Application Data''Stuff" ) );
当我发现简单的Directory.CreateDirectory()
不能工作时,我不得不经常使用这段代码。
现在在我本地的Windows 2008 R2标准64位上,上面的代码可以正常工作。当我在Azure角色OnStart()
中执行相同操作时,会发生以下情况:
- Environment.GetFolderPath()返回D:'ProgramData
- 一旦递归下降,调用
Directory.Exists( "D:''ProgramData''ApplicationData" )
,调用返回true
,递归结束 当
Directory.CreateDirectory( "D:''ProgramData''Application Data''Stuff" )
调用失败时无法找到"D:'ProgramData'Application Data'Stuff"路径的一部分。
我就是不明白。也许是与虚拟化有关?
发生了什么,我该如何解决?
两个小提示:
-
Directory.CreateDirectory
已经递归工作。不需要你的Creator
类。我建议你把它去掉。 您的组合路径将是%AllUsersProfile%'Application Data'Application Data'Stuff。注意到双重申请数据吗?
Environment.SpecialFolder.CommonApplicationData
返回%AllUsersProfile%'Application Data
,与Application Data'Stuff
组合…我有点惊讶这在一个标准的服务器上工作…IIS下的web站点是作为一个相当有限的特权用户运行的,我不希望这个用户有权限在%AllUsersProfile%下创建目录。在本地测试时,您确定网站没有在更高权限的帐户下运行吗?