将文件从文件夹移动到文件夹

问题描述:

:20:S10734539/940 

正在读取文件夹中的swift消息,并在行:20:我执行某种验证以确定文件和读取是否有效。在这种情况下,如果line:20:包含940,则windows服务在读取完成后读取并将其移至成功文件夹。但是一个无效的文件不会有940行:20:,windows服务是为了将无效文件移动到无效的文件位置。我已经写了一个代码来做到这一点,但它无法移动文件。我收到一条错误消息'使用中的文件',查找我的代码片段。将文件从文件夹移动到文件夹

if (Directory.Exists(@CBN_INFLOW940)) 
DirectoryInfo dr = new DirectoryInfo(CBN_INFLOW940); 
         FileInfo[] fi = dr.GetFiles(); 
         string[] files = Directory.GetFiles(CBN_INFLOW940); 

int lengthchk = 0;

if (files.Length < 1) 
    check = false; 

while (files.Length > lengthchk) 
{ 
    StringBuilder sb = new StringBuilder(); 
    logger.Info(fi[lengthchk].Name + ": read from folder"); 
    string narrationgen = ""; 
    bool isvalidrtgs = false; 
    DateTime createddate = fi[lengthchk].CreationTime.Date; 
    FileStream stream = null; 
    try 
    { 
    stream = File.Open(files[lengthchk], FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
    StreamReader sf = new StreamReader(stream); 

    } 

if (line.Contains(":20:")) 
{ 
     firstchk = 1; 
     if (!line.Contains('/')) 
     { 
      string[] fnamesplit = fi[lengthchk].Name.Split('.'); 
      string newfname = fnamesplit[0] + "_bk" + ".txt"; 
      string destlocation = Invalidfilelocation940 + newfname; 
      string sourcelocation = CBN_INFLOW940 + fi[lengthchk]; // + "\\" 
      File.Move(sourcelocation, destlocation); 
      return; 
     } 
     string[] narr = line.Split('/'); 
     string filecode = narr[1]; 

     if (filecode.Trim() != "940") 
     { 
      string[] fnamesplit = fi[lengthchk].Name.Split('.'); 
      string newfname = fnamesplit[0] + "_bk" + ".txt"; 
      string destlocation = Invalidfilelocation940 + newfname; 
      string sourcelocation = CBN_INFLOW940 + "\\" + fi[lengthchk]; 
      File.Move(sourcelocation, destlocation); 

      return; 
     } 
} 
+0

在这里发布代码时,*不要*使用制表符并尝试限制缩进。这使得代码更易于阅读。 – crashmstr

+2

另外,您是否确定在尝试移动之前关闭文件? – crashmstr

+0

尝试从您的移动代码中分离出您的支票代码。这将是一个更好的设计,此外,当您尝试移动文件时,您可能会锁定文件进行阅读。 – Derek

尝试从您的移动代码分裂出来的校验码。这将是一个更好的设计,此外,当您尝试移动文件时,您可能会锁定文件进行阅读。

想:

if (ShouldMoveFile(filename)) 
{ 
    File.Move... 
} 

并确保您关闭您正在阅读的文件。

如果你保持代码相同:

添加行:

sf.Close(); 
stream.Close(); 

你去移动文件之前。

问题可能是您打开了文件以进行读取写入。

stream = File.Open(files[lengthchk], FileMode.Open, FileAccess.ReadWrite, FileShare.None); 

这里的文件访问是杀手FileAccess.ReadWrite

可能,如果你打开它只是为了阅读你就可以移动,但实际上,当你阅读完的文件,你应该关闭它在你尝试移动它之前。

理想情况下,您可以使用一种方法检查文件是否需要移动,另一种是执行移动。

+0

我将文件访问权限改为了读取,但其仍然没有移动。验证后,webservice读取文件,完成后移动到另一个位置,但是如果验证为false,则无法移动文件。 – user3560266

+0

然后您需要关闭该文件,然后再尝试移动它。 –