c#顺序文件输出
本文关键字:输出 顺序文件 | 更新日期: 2023-09-27 17:50:50
我有一个输出到excel文件的C# winform
应用程序。假设文件名的名称格式为:Output1.xlsl
我希望在每个按钮单击/执行时将输出保存到另一个顺序文件。接下来是Output2.xlsl
, Output3.xlsl
…等。
如何检查,我知道检查文件是否存在,但如何检查编号?
FileInfo newExcelFile = new FileInfo(@"Output1.xlsx");
if (newExcelFile.Exists)
{
...
}
你可以使用File.Exists
和Path.Combine
:
string directory = @"C:'SomeDirectory";
string fileName = @"Output{0}.xlsx";
int num = 1;
while (File.Exists(Path.Combine(directory, string.Format(fileName, num))))
num++;
var newExcelFile = new FileInfo(Path.Combine(directory, string.Format(fileName, num)));
一般来说,静态File
方法比总是创建FileInfo
实例更有效。
我们使用类似的方法来实现这一点:
/// <param name="strNewPath">ex: c:'</param>
/// <param name="strFileName">ex: Output.xlsx</param>
/// <returns>Next available filename, ex: Output3.xlsx</returns>
public static string GetValidFileName(string strNewPath, string strFileName)
{
var strFileNameNoExt = Path.GetFileNameWithoutExtension(strFileName);
var strExtension = Path.GetExtension(strFileName);
var intCount = 1;
while (File.Exists(Path.Combine(strNewPath, strFileNameNoExt + intCount + strExtension)))
intCount++;
return Path.Combine(strNewPath, strFileNameNoExt + intCount + strExtension);
}
用while循环把它括起来
int num = 1;
FileInfo newExcelFile = new FileInfo("Output1.xlsx");
while(newExcelFile.Exists)
{
newExcelFile = new FileInfo("Output" + num + ".xlsx");
num++;
}
我会在文件夹中找到最新的文件,并使用它的编号作为开始的基础。如果没有其他程序要写,这应该足够了。
DirectoryInfo di = new DirectoryInfo("Some folder");
FileInfo fi = di.GetFiles().OrderByDescending(s => s.CreationTime).First();
string fileName = fi.Name;
//…
你可以做一个简单的循环:
FileInfo newExcelFile = null;
for (int i = 0; i < int.MaxValue; i++)
{
newExcelFile = new FileInfo(string.Format(@"Output{0}.xlsx", i));
if (!newExcelFile.Exists)
{
break;
}
newExcelFile = null;
}
if (newExcelFile == null)
{
// do you want to try 2147483647
// or show an error message
// or throw an exception?
}
else
{
// save your file
}
这可能不是最有效的方法,但我可以建议以下解决方案
- 将文件名分割为"。"
- 删除子字符串"Output"
- 现在排序得到最大的数目。
这取决于逻辑。如果您有Output1.xlsx
Output2.xlsx
Output3.xlsx
并删除Output2.xlsx
,应该发生什么,新文件是Output2.xlsx
还是Output4.xlsx
?如果您希望新文件的数目总是最大的,可以使用类似的代码
int lastNum = 0;
string[] files = Directory.GetFiles("c:''myDir", "Output*.xlsx");
if (files.Length > 0)
{
Array.Sort(files);
lastNum = Convert.ToInt32(Regex.Match(files[files.Length - 1], "Output[''d](*).xlsx").Result("$1"));
lastNum++;
}
FileInfo newExcelFile = new FileInfo("Output" + lastNum + ".xlsx");
当然可以循环,但如果有数千个文件,这不是一个好主意。对于少量的文件,
就可以了 int i = 0;
for (; i < Int32.MaxValue; i++)
{
if (File.Exists("Output" + i + ".xlsx"))
break;
}