代码在本地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"路径的一部分。

我就是不明白。也许是与虚拟化有关?

发生了什么,我该如何解决?

代码在本地Windows 2008上运行正常,但无法在Azure云上的应用程序数据中创建子文件夹

两个小提示:

  1. Directory.CreateDirectory已经递归工作。不需要你的Creator类。我建议你把它去掉。
  2. 您的组合路径将是%AllUsersProfile%'Application Data'Application Data'Stuff。注意到双重申请数据吗?Environment.SpecialFolder.CommonApplicationData返回%AllUsersProfile%'Application Data,与Application Data'Stuff组合…

我有点惊讶这在一个标准的服务器上工作…IIS下的web站点是作为一个相当有限的特权用户运行的,我不希望这个用户有权限在%AllUsersProfile%下创建目录。在本地测试时,您确定网站没有在更高权限的帐户下运行吗?