在应用程序中,用户可以打开已保存的文件。 我的目标是检查文件是否已经打开,并且只有在创建本地副本时才允许用户再次打开它,以便不能同时修改同一文件。
工作流程如下:
if (File.Exists(strFileName))
bCreateCopy = AlertBox.Display("File already open. Work on a copy?", true/false);
if (bCreateCopy == true)
{
strNewAutomaticFileName = createAutomaticFileName (sourceFile)
File.Copy(sourceFile, strNewAutomaticFileName );
}
是否有一种方法可以在'createAutomaticFileName()
'中完成我需要的工作?
我正在考虑创建典型的大炮名称:
sourceFile - copy
sourceFile - copy (1)
sourceFile - copy (2)
是否有更好的解决方法来实现此目的?
答案 0 :(得分:1)
如果我理解你,那就尝试一下:
public string createAutomaticFileName(string sourceFile)
{
var done = true;
int i = 0;
while (done)
{
var newFileName = (i == 0) ? string.Format("{0} - copy ", sourceFile) : string.Format("{0} - copy ({1})", sourceFile, i.ToString());
if (!File.Exists(newFileName))
{
return newFileName;
}
i++;
}
}
答案 1 :(得分:0)
这也是扩展名的后缀:
if (File.Exists(strFileName))
{
bCreateCopy = AlertBox.Display("File already open. Work on a copy?", true/false);
}
if (bCreateCopy == true)
{
strNewAutomaticFileName = createAutomaticFileName(sourceFile)
File.Copy(sourceFile, strNewAutomaticFileName );
}
...
private string createAutomaticFileName(string filePath, int count = 1)
{
var pathWithoutExtension = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath));
var newFilePath = String.Format("{0} - copy ({1}){2}", pathWithoutExtension, count, Path.GetExtension(filePath));
if (File.Exists(newFilePath))
{
return createAutomaticFileName(filePath, ++count);
}
return newFilePath;
}
当然,在您已经知道初始文件存在之后,您需要使用它,就像在您的示例中一样。