通过删除其扩展名来重命名文件

时间:2017-10-03 12:44:36

标签: c# file

我有一个程序可以创建首先存储在本地的文档。然后它将它们发送到网络文件夹。

由于笔记本电脑上的用户权限,他们无法删除本地驱动器。该程序因此复制它们。希望本地权限有一天更改,它会尝试移动它们,当它失败时会复制它们。

foreach (var file in Directory.GetFiles(Properties.Settings.Default.MasterCopies, "*.xml"))
{
    x = x + 1;
    try
    {
        try
        {    
            string NetworkPath = XMLWork.XMLGetElement(@"D:\\" + Properties.Settings.Default.currentUser + "\\Digital Statements\\App_Data\\User\\" + Properties.Settings.Default.currentUser + ".wit", "NetworkMasters");
            string FileName = Path.GetFileName(file);
            string FilePath = NetworkPath;
            File.Move(file, Path.Combine(FilePath, FileName));
        }
        catch
        {
        }
    }
    catch
    {
        try
        {
            string NetworkPath = XMLWork.XMLGetElement(@"D:\\" + Properties.Settings.Default.currentUser + "\\Digital Statements\\App_Data\\User\\" + Properties.Settings.Default.currentUser + ".wit", "NetworkMasters");
            string FileName = Path.GetFileName(file);
            string FilePath = NetworkPath;
            File.Copy(file, Path.Combine(FilePath, FileName));
        }
        catch
        {
        }
    }
    e.Result = x;
    MasterBackups.ReportProgress(x);
}

我不希望程序不断尝试复制已经处理过的文件。我认为最简单的方法就是修剪文件扩展名" .xml"在成功将其复制到网络后从他们的文件中,因此在下次运行时它不会看到该文件。

我如何实现这一目标 - 所以程序会看到" Test.xml",将其复制到网络,然后将本地副本重命名为"测试"?

编辑 - 我可以在本地重命名文件,我无法移动或删除。权限由IT部门设置,即使他们不确定为什么这样设置 - 但它是!

4 个答案:

答案 0 :(得分:0)

如何创建临时文件呢?请参阅Path.GetTempFileName方法。不是最理想的解决方案,但如果你不能以编程方式删除它们,那么你至少可以将它们放在最终会被清理的地方(即当用户运行磁盘清理时)。

答案 1 :(得分:0)

您可以将已处理的文件名存储在文本文件或sqlite数据库中,该文件将维护已处理的每个文件名。在复制每个新文件后复制并附加/插入文本/数据库之前,请与此列表进行比较。

答案 2 :(得分:0)

这样的事情怎么样?使用文件末尾的_copy_Date重命名文件。 (在扩展之前)。通过这种方式,您可以知道上次复制它的时间没有查看它的文件属性。

List<String> files = Directory.GetFiles(Properties.Settings.Default.MasterCopies, "*.xml");
foreach (var file in files)
{
    x = x + 1;
    try
    {

        string NetworkPath = XMLWork.XMLGetElement(@"D:\\" + Properties.Settings.Default.currentUser + "\\Digital Statements\\App_Data\\User\\" + Properties.Settings.Default.currentUser + ".wit", "NetworkMasters");
        string FileName = Path.GetFileName(file) + "_Copy_" + DateTime.Now; // Append some info to copyed file name
        string FilePath = NetworkPath;
        if (!files.Contains(FileName)) // Check if copy file is in directory already
        {
            File.Move(file, Path.Combine(FilePath, FileName));
        }
    }
    catch
    {
        // Catch something here
    }
    e.Result = x;
    MasterBackups.ReportProgress(x);
}

答案 3 :(得分:0)

@Equalsk得到了 - 这是我的代码。 我将文件复制到网络,然后修剪&#34; .XML&#34;从最后并用&#34; .DEL&#34;替换它。因此,一旦权限排序,我就可以使用工具删除&#34; .DEL&#34;

public class doit extends AsyncTask <Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {

        try {
            Connection.Response html = Jsoup.connect("https://en.wikipedia.org/wiki/Main_Page").execute();
            doc = html.parse();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }


    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        try {
        File file = new File("wikihome.html");
        FileUtils.writeStringToFile(file, doc.outerHtml(), "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}