如何将子文件夹和文件的创建限制在一个位置?
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;
就是这样想的
我的应用程序生成电子表格文件和子文件夹以对其进行分类,然后将它们存储在网络上的共享文件夹中;它工作正常 - 此网络位置存在:
\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;
就是这样想的