如何将子文件夹和文件的创建限制在一个位置?

How can I restrict the creation of subfolders and files to one location only?

我的应用程序生成电子表格文件和子文件夹以对其进行分类,然后将它们存储在网络上的共享文件夹中;它工作正常 - 此网络位置存在:

\storageblade\cs\REPORTING\RoboReporter

...应用会根据需要动态添加子文件夹,例如:

\storageblade\cs\REPORTING\RoboReporter\ABUELOS

...依次得到自己的子文件夹,如:

\storageblade\cs\REPORTING\RoboReporter\ABUELOS161230_1336

...哪些最终子文件夹包含生成的电子表格文件[s]。

我正在保存动态创建的子文件夹和 .xlsx 文件,如下所示:

String _uniqueFolder = RoboReporterConstsAndUtils.uniqueFolder;
var fromDate = _delPerfBeginDate.ToString("yyyyMMdd");
var toDate = _delPerfEndDate.ToString("yyyyMMdd");
var sharedFolder = String.Format(@"\storageblade\cs\REPORTING\RoboReporter\{0}", _uniqueFolder);
RoboReporterConstsAndUtils.ConditionallyCreateDirectory(sharedFolder);
var filename = String.Format("{0}\{1} - Delivery Performance - from {2} to {3}.xlsx", sharedFolder,
    _unit, fromDate, toDate);

if (File.Exists(filename))
{
    File.Delete(filename);
}
Stream stream = File.Create(filename);
package.SaveAs(stream);
stream.Close();
package.Save();

正如我所说,它工作正常 - 文件夹和文件是在共享网络位置创建的。

但是,子文件夹也在 .exe 所在的文件夹中创建。例如,在开发机器上,这些最终位于 C:\Projects\~\bin\Debug,因此我有许多子文件夹,例如:

C:\Projects\~\bin\Debug\ABUELOS161230_0908

...在 "live" 机器上我放置 .exe 的文件夹中(以及它们所属的共享网络区域)。

这是神秘的 ConditionallyCreateDirectory() 方法:

internal static void ConditionallyCreateDirectory(string dirName)
{
    Directory.CreateDirectory(dirName);
}

为什么?更重要的是,我该如何预防呢?我不需要这种加倍的文件存储——其中一些文件很大,最终会导致机器故障,进而导致网络故障,进而导致业务故障,进而导致自己被邀请离开场所等

更新

在回答 OfirW 的 comment/question 时,我认为以下是相关部分:

在 RoboReporterConstsAndUtils 中:

public static string uniqueFolder = String.Empty;
. . .
internal static string GetUniqueFolder(string _unit)
{
    return uniqueFolder = String.Format("{0}\{1}", _unit.ToUpper(), GetYYYYMMDDHHMM());
}

internal static void ConditionallyCreateDirectory(string dirName)
{
    Directory.CreateDirectory(dirName);
}

它在别处的引用方式:

RoboReporterConstsAndUtils.ConditionallyCreateDirectory(RoboReporterConstsAndUtils.GetUniqueFolder(_unit));
                String _uniqueFolder = RoboReporterConstsAndUtils.uniqueFolder;

_unit在构造函数中赋值:

public PriceComplianceRpt_EPPlus(DateTime begin, DateTime end, String unit)
{
    _begDate = begin;
    _endDate = end;
    _unit = unit;
}

...这样称呼:

internal static void GenerateAndSavePriceComplianceReport(QueuedReports qr)
{
    var pcr = new PriceComplianceRpt_EPPlus(qr.StartDateRange, qr.EndDateRange, qr.Unit);
    pcr.GeneratePriceComplianceRpt();
}

这一行是创建附加目录的地方:

RoboReporterConstsAndUtils.ConditionallyCreateDirectory(RoboReporterConstsAndUtils.GetUniqueFolder(_unit));

你为什么要这么做? 我想你可以像这样改变 class 在 RoboReporterConstsAndUtils 中:

public static string uniqueFolder = String.Empty;
. . .
internal static void SetUniqueFolder(string _unit)
{
    uniqueFolder = String.Format("{0}\{1}", _unit.ToUpper(), GetYYYYMMDDHHMM());
}

internal static void ConditionallyCreateDirectory(string dirName)
{
    Directory.CreateDirectory(dirName);
}

并替换为:

RoboReporterConstsAndUtils.ConditionallyCreateDirectory(RoboReporterConstsAndUtils.GetUniqueFolder(_unit));
String _uniqueFolder = RoboReporterConstsAndUtils.uniqueFolder;

有了这个:

RoboReporterConstsAndUtils.SetUniqueFolder(_unit));
String _uniqueFolder = RoboReporterConstsAndUtils.uniqueFolder;

就是这样想的