Add copying/moving of files/dirs
This commit is contained in:
parent
1e74f09670
commit
f9f834b1c3
4 changed files with 160 additions and 9 deletions
|
@ -401,6 +401,63 @@ namespace ShiftOS.Objects.ShiftFS
|
|||
return paths.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Copies a file or directory from one path to another, deleting the original.
|
||||
/// </summary>
|
||||
/// <param name="path">THe input path, must be a valid directory or file.</param>
|
||||
/// <param name="target">The output path.</param>
|
||||
public static void Move(string path, string target)
|
||||
{
|
||||
if (FileExists(path))
|
||||
{
|
||||
WriteAllBytes(target, ReadAllBytes(path));
|
||||
Delete(path);
|
||||
}
|
||||
else if (DirectoryExists(path))
|
||||
{
|
||||
if (!DirectoryExists(target))
|
||||
CreateDirectory(target);
|
||||
foreach (var file in GetFiles(path))
|
||||
{
|
||||
var name = GetFileInfo(file).Name;
|
||||
Copy(file, target + "/" + name);
|
||||
}
|
||||
foreach (var dir in GetDirectories(path))
|
||||
{
|
||||
string name = GetDirectoryInfo(dir).Name;
|
||||
Copy(dir, target + "/" + name);
|
||||
}
|
||||
Delete(path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Copies a file or directory from one path to another.
|
||||
/// </summary>
|
||||
/// <param name="path">The input path, must be a valid directory or file.</param>
|
||||
/// <param name="target">The output path.</param>
|
||||
public static void Copy(string path, string target)
|
||||
{
|
||||
if (FileExists(path))
|
||||
WriteAllBytes(target, ReadAllBytes(path));
|
||||
else if (DirectoryExists(path))
|
||||
{
|
||||
if (!DirectoryExists(target))
|
||||
CreateDirectory(target);
|
||||
foreach(var file in GetFiles(path))
|
||||
{
|
||||
var name = GetFileInfo(file).Name;
|
||||
Copy(file, target + "/" + name);
|
||||
}
|
||||
foreach(var dir in GetDirectories(path))
|
||||
{
|
||||
string name = GetDirectoryInfo(dir).Name;
|
||||
Copy(dir, target + "/" + name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static string[] GetFiles(string path)
|
||||
{
|
||||
string[] pathlist = path.Split('/');
|
||||
|
|
|
@ -60,9 +60,20 @@ namespace ShiftOS.WinForms.Applications
|
|||
try
|
||||
{
|
||||
var itm = lvitems.SelectedItems[0];
|
||||
if (FileExists(currentdir + "/" + itm.Text))
|
||||
if (cbfiletypes.Text != "Directory")
|
||||
{
|
||||
txtfilename.Text = itm.Text;
|
||||
if (FileExists(currentdir + "/" + itm.Text))
|
||||
{
|
||||
txtfilename.Text = itm.Text;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DirectoryExists(currentdir + "/" + itm.Text))
|
||||
{
|
||||
txtfilename.Text = itm.Text;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
@ -72,23 +83,41 @@ namespace ShiftOS.WinForms.Applications
|
|||
{
|
||||
string fname = "";
|
||||
fname = (!string.IsNullOrWhiteSpace(txtfilename.Text)) ? txtfilename.Text : "";
|
||||
fname = (!fname.EndsWith(cbfiletypes.SelectedItem.ToString())) ? fname + cbfiletypes.SelectedItem.ToString() : fname;
|
||||
fname = (fname == cbfiletypes.SelectedItem.ToString()) ? "" : fname;
|
||||
if (cbfiletypes.Text != "Directory")
|
||||
{
|
||||
fname = (!fname.EndsWith(cbfiletypes.SelectedItem.ToString())) ? fname + cbfiletypes.SelectedItem.ToString() : fname;
|
||||
fname = (fname == cbfiletypes.SelectedItem.ToString()) ? "" : fname;
|
||||
}
|
||||
|
||||
switch (style)
|
||||
{
|
||||
|
||||
case FileOpenerStyle.Open:
|
||||
|
||||
|
||||
if(FileExists(currentdir + "/" + fname))
|
||||
if (cbfiletypes.Text == "Directory")
|
||||
{
|
||||
callback?.Invoke(currentdir + "/" + fname);
|
||||
this.Close();
|
||||
if (DirectoryExists(currentdir + "/" + fname))
|
||||
{
|
||||
callback?.Invoke(currentdir + "/" + fname);
|
||||
this.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
Infobox.Show("{FILE_NOT_FOUND}", "{FILE_NOT_FOUND_EXP}");
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Infobox.Show("{FILE_NOT_FOUND}", "{FILE_NOT_FOUND_EXP}");
|
||||
if (FileExists(currentdir + "/" + fname))
|
||||
{
|
||||
callback?.Invoke(currentdir + "/" + fname);
|
||||
this.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
Infobox.Show("{FILE_NOT_FOUND}", "{FILE_NOT_FOUND_EXP}");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FileOpenerStyle.Save:
|
||||
|
|
|
@ -134,12 +134,14 @@ namespace ShiftOS.WinForms.Applications
|
|||
this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
|
||||
this.copyToolStripMenuItem.Size = new System.Drawing.Size(47, 20);
|
||||
this.copyToolStripMenuItem.Text = "Copy";
|
||||
this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click);
|
||||
//
|
||||
// moveToolStripMenuItem
|
||||
//
|
||||
this.moveToolStripMenuItem.Name = "moveToolStripMenuItem";
|
||||
this.moveToolStripMenuItem.Size = new System.Drawing.Size(49, 20);
|
||||
this.moveToolStripMenuItem.Text = "Move";
|
||||
this.moveToolStripMenuItem.Click += new System.EventHandler(this.moveToolStripMenuItem_Click);
|
||||
//
|
||||
// FileSkimmer
|
||||
//
|
||||
|
|
|
@ -324,6 +324,69 @@ namespace ShiftOS.WinForms.Applications
|
|||
copyToolStripMenuItem.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
string path = currentdir + "/" + lvitems.SelectedItems[0].Tag.ToString();
|
||||
if (DirectoryExists(path))
|
||||
{
|
||||
FileSkimmerBackend.GetFile(new[] { "Directory" }, FileOpenerStyle.Save, (newPath) =>
|
||||
{
|
||||
Copy(path, newPath);
|
||||
ResetList();
|
||||
});
|
||||
}
|
||||
else if (FileExists(path))
|
||||
{
|
||||
string[] psplit = path.Split('.');
|
||||
string ext = "." + psplit[psplit.Length - 1];
|
||||
FileSkimmerBackend.GetFile(new[] { ext }, FileOpenerStyle.Save, (newPath) =>
|
||||
{
|
||||
Copy(path, newPath);
|
||||
ResetList();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void moveToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
string path = currentdir + "/" + lvitems.SelectedItems[0].Tag.ToString();
|
||||
if (DirectoryExists(path))
|
||||
{
|
||||
FileSkimmerBackend.GetFile(new[] { "Directory" }, FileOpenerStyle.Save, (newPath) =>
|
||||
{
|
||||
Utils.Move(path, newPath);
|
||||
ResetList();
|
||||
});
|
||||
}
|
||||
else if (FileExists(path))
|
||||
{
|
||||
string[] psplit = path.Split('.');
|
||||
string ext = psplit[psplit.Length - 1];
|
||||
FileSkimmerBackend.GetFile(new[] { ext }, FileOpenerStyle.Save, (newPath) =>
|
||||
{
|
||||
Utils.Move(path, newPath);
|
||||
ResetList();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Reference in a new issue