我有一个C# winform
应用程序正在输出到excel文件。
假设文件名的名称格式为:Output1.xlsl
我想在每次按钮点击/执行时将输出保存到另一个顺序文件。
接下来它将是Output2.xlsl
,Output3.xlsl
......等等。
如何检查,我知道检查文件是否存在,但如何检查编号?
FileInfo newExcelFile = new FileInfo(@"Output1.xlsx");
if (newExcelFile.Exists)
{
...
}
答案 0 :(得分:3)
您可以使用此循环,将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
实例更有效。
答案 1 :(得分:2)
我们使用类似于此的方法来实现此目的:
/// <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);
}
答案 2 :(得分:1)
将其包裹在while循环中
int num = 1;
FileInfo newExcelFile = new FileInfo("Output1.xlsx");
while(newExcelFile.Exists)
{
newExcelFile = new FileInfo("Output" + num + ".xlsx");
num++;
}
答案 3 :(得分:1)
我会在文件夹中找到最新的文件并使用其编号作为开始的基础。如果没有其他程序可以写,那就足够了。
DirectoryInfo di = new DirectoryInfo("Some folder");
FileInfo fi = di.GetFiles().OrderByDescending(s => s.CreationTime).First();
string fileName = fi.Name;
// ...
答案 4 :(得分:1)
你可以做一个简单的循环:
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
}
答案 5 :(得分:0)
它可能不是最有效的,但我可以建议以下解决方案
答案 6 :(得分:0)
这取决于逻辑。如果您有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;
}