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

时间:2016-12-30 22:11:22

标签: c# file dynamic network-programming streaming

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

\\storageblade\cs\REPORTING\RoboReporter

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

\\storageblade\cs\REPORTING\RoboReporter\ABUELOS

...反过来,它们会获得自己的子文件夹,例如:

\\storageblade\cs\REPORTING\RoboReporter\ABUELOS\20161230_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\ABUELOS\20161230_0908

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

这是神秘的ConditionalCreateDirectory()方法:

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

为什么呢?更重要的是,我该如何防止这种情况?我不需要这种文件存储加倍 - 其中一些文件很大,最终会导致机器出现故障,这会导致网络出现故障,从而导致业务失败,这将导致我自己失败邀请离开场所等。

更新

在回答OfirW的评论/问题时,我认为这是相关的部分:

在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();
}

1 个答案:

答案 0 :(得分:1)

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

RoboReporterConstsAndUtils.ConditionallyCreateDirectory(RoboReporterConstsAndUtils.GetUniqueFolder(_unit));
你为什么这样做? 我想你可以改变这样的课程 在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;

它的想法