删除的文件仍然存在?

时间:2015-11-30 19:39:30

标签: c# file delete-file file-move

我正在尝试保存一些数据的备份。如果备份存在,那么我想删除它,为最新文件提供备份文件的名称,然后将新文件保存为最新文件。

我遇到的问题是当我删除现有文件时,我仍然无法以同一名称保存另一个文件。系统仍然认为该文件存在,并且实际上该文件在程序抛出异常时不会被删除,即使这两行是在彼此之后。我唯一能想到的是,在移动操作想要执行时,“删除”操作没有时间完成。但我不知道如何解决它。

代码看起来像这样。

guard ... else ...

我想过设置一个计时器以便稍后执行移动功能,但在我看来,这可能是处理问题的一种非常草率和危险的方式。此外,需要等待的时间可能因系统而异。所以我认为必须有更好的方法。

2 个答案:

答案 0 :(得分:2)

问题可能与您使用两种不同的.Substring方法String#Substring(int)String#Substring(int,int)这一事实有关。事实上:

File.Delete(filePath.Substring(filePath.Length - 4) + ".bak");
//                   ^ with one int
File.Move(filePath, filePath.Substring(0, filePath.Length - 4) + ".bak");
//                           ^ with two ints

不幸的是,这两者在语义上并不相同。 one with one int是起始索引。因此,filePath等于test.txt,您要移除的文件为.txt.bak,接下来您的目标是将文件移至test.bak。或者使用Mono的C#模拟器运行它:

csharp> String filePath = "test.txt";
csharp> filePath.Substring(filePath.Length - 4) + ".bak"
".txt.bak"
csharp> filePath.Substring(0, filePath.Length - 4) + ".bak"
"test.bak"

请用以下内容进行更新:

File.Delete(filePath.Substring(0,filePath.Length - 4) + ".bak");
//                   ^ added zero
File.Move(filePath, filePath.Substring(0, filePath.Length - 4) + ".bak");

另一个更优雅且不易出错的方法显然是在两者之间使用变量,这样你确定,你在谈论同一个文件:

String backupfile = filePath.Substring(0, filePath.Length - 4) + ".bak";
File.Delete(backupfile);
File.Move(filePath,backupfile);

最后,不建议您自己进行路径处理:使用专用方法来连接和操作文件路径。

答案 1 :(得分:1)

我尝试了一些代码,但是工作正常。我只更改了您定义备份文件名的方式,因为文件扩展名可以多于或少于3个字符:

Table:           teams_info

team_id         team_name         entry_year         status 
    1                   team 1                 2015                  1
    2                   team 2                 2015                  1
    3                   team 2                 2016                  1

Table:         team_players

player_id           team_id           status           members_id       position 
       1                     1                      0                       1                      1
       2                     1                      1                       2                      2
       3                     1                      1                       3                      3
       4                     1                      1                       4                      4
       5                     2                      0                       5                      1
       6                     2                      0                       6                      2
       7                     2                      1                       7                      3

Table:          members

members_id           first_name           surname            gender
       1                  joe                  blogg                 male
       2                  james                smith                 male
       3                  sarah                marshall             female
       4                  tony                 walker                 male
       5                  peter                jones                 male
       6                  jessica              varley                 female
       7                 jane                  varley                 female

但是如果它对您不起作用,请尝试将备份重命名为“* .bak2”,然后删除该备份。

希望有帮助...