我有一个程序可以创建首先存储在本地的文档。然后它将它们发送到网络文件夹。
由于笔记本电脑上的用户权限,他们无法删除本地驱动器。该程序因此复制它们。希望本地权限有一天更改,它会尝试移动它们,当它失败时会复制它们。
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部门设置,即使他们不确定为什么这样设置 - 但它是!
答案 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();
}
}
}