0

Windowsがフォルダーを実際にはファイルとフォルダーと見なすというランダムな問題が発生しています。ランダムなマシンで発生し、複製できません。.NET Directory.CreateDirectory メソッドを実行しています。

私は基本的にこのコードを実行しています:

string directoryToCreate = folderPath + @"\" + directoryName + @"\";
 if (Directory.Exists(directoryToCreate ) == false)
         Directory.CreateDirectory(directoryToCreate);

ディレクトリが作成されたら、そこに一連のファイルをコピーします。

フォルダー/ファイルはエクスプローラーに「ファイル」タイプとして表示されますが、同じ名前で別のファイルまたはフォルダーを作成することはできません。バックスラッシュの有無にかかわらずコードを試しましたが、違いはありません

これは、ディレクトリが作成された直後に呼び出されます。

    private static void ProcessDirectoryForUpdating(string pNetworkFolder, string pLocalFolder)
    {
        DirectoryInfo networkFolder = new DirectoryInfo(pNetworkFolder);
        DirectoryInfo localFolder = new DirectoryInfo(pLocalFolder);

        try
        {
            foreach (DirectoryInfo tmpNetworkFolder in networkFolder.GetDirectories())
            {
                if (Directory.Exists(localFolder.FullName + @"\" + tmpNetworkFolder.Name) == false)
                    Directory.CreateDirectory(localFolder.FullName + @"\" + tmpNetworkFolder.Name);

                ProcessDirectoryForUpdating(tmpNetworkFolder.FullName, localFolder.FullName + @"\" + tmpNetworkFolder.Name);
            }
        }
        catch (Exception ex)
        {
            tracer.TraceEvent(TraceEventType.Error, 0, "ProcessDirectoryForUpdating:  Error processing directory " + pNetworkFolder + "  " + ex.Message);
        }

        foreach (FileInfo tmpNetworkFile in networkFolder.GetFiles())
        {
            try
            {
                if (File.Exists(localFolder.FullName + @"\" + tmpNetworkFile.Name) == false)
                    tmpNetworkFile.CopyTo(localFolder.FullName + @"\" + tmpNetworkFile.Name, true);
                else if (tmpNetworkFile.LastWriteTime > (new DirectoryInfo(localFolder.FullName + @"\" + tmpNetworkFile.Name).LastWriteTime))
                    tmpNetworkFile.CopyTo(localFolder.FullName + @"\" + tmpNetworkFile.Name, true);

            }
            catch (Exception ex)
            {
                tracer.TraceEvent(TraceEventType.Error, 0, "ProcessDirectoryForUpdating:  Error processing file " + tmpNetworkFile.FullName + "  " + ex.Message);
            }
        }

    }
4

0 に答える 0