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

本文关键字:文件夹 移动 文件 | 更新日期: 2023-09-27 17:59:17

:20:S10734539/940

正在从文件夹中读取swift消息,在第20行:我执行某种验证,以了解文件和读取是否有效。在这种情况下,如果第20行中有940,则windows服务读取并在完成后将其移动到成功文件夹中。但是无效文件的第20行不会有940,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;
        }
}

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

问题可能是打开文件进行读写。

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

这里的文件Access是杀手级的FileAccess.ReadWrite

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

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

尝试从移动代码中分离出检查代码。这将是一个更好的设计,加上你可能会锁定文件以供阅读,而你正试图移动它

思考:

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

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

如果你保持代码不变:

添加行:

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

然后再移动文件。

相关文章: