C# .NET - making data recovery software -
Hi
refer the links
it might help you
http://www.c-sharpcorner.com/Forums/Thread/54387/
http://www.freelancer.com/projects/Java-Visual-Basic/Data-recovery-software.723158.html
refer the links
it might help you
http://www.c-sharpcorner.com/Forums/Thread/54387/
http://www.freelancer.com/projects/Java-Visual-Basic/Data-recovery-software.723158.html

Riley K replied to murtaza rampurawala on 14-Jun-11 04:10 AM
Hi
I dont think there are any classes to do this in C#. You need to use some free softwares to do this.
http://lifehacker.com/393084/how-to-recover-deleted-files-with-free-software

Jitendra Faye replied to murtaza rampurawala on 14-Jun-11 04:11 AM
Such an application I believe uses low level APIs. You must first find a way to scan the harddrive for deleted data, and then process that data to find typical file type headers. C# like most other languages can certanly be used to process the data once you find it.
follow this link-
http://www.codeproject.com/Messages/3553742/Csharp-program-to-recover-data.aspx
Hope this will help you.
follow this link-
http://www.codeproject.com/Messages/3553742/Csharp-program-to-recover-data.aspx
Hope this will help you.

Kirtan Patel replied to murtaza rampurawala on 14-Jun-11 04:53 AM
you can start by using win32 API Functions to access the FAT allocation table of recovery
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);
Here is sample code how to use that code [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern SafeFindHandle FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool FindClose(SafeHandle hFindFile);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool FindNextFile(SafeHandle hFindFile, out WIN32_FIND_DATA lpFindFileData);
internal sealed class SafeFindHandle : SafeHandleZeroOrMinusOneIsInvalid
{
// Methods
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
internal SafeFindHandle()
: base(true)
{
}
public SafeFindHandle(IntPtr preExistingHandle, bool ownsHandle) : base(ownsHandle)
{
base.SetHandle(preExistingHandle);
}
protected override bool ReleaseHandle()
{
if (!(IsInvalid || IsClosed))
{
return FindClose(this);
}
return (IsInvalid || IsClosed);
}
protected override void Dispose(bool disposing)
{
if (!(IsInvalid || IsClosed))
{
FindClose(this);
}
base.Dispose(disposing);
}
}
private long RecurseDirectory(string directory, int level, out int files, out int folders) {
IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
long size = 0;
files = 0;
folders = 0;
Kernel32.WIN32_FIND_DATA findData;
// please note that the following line won't work if you try this on a network folder, like \\Machine\C$
// simply remove the \\?\ part in this case or use \\?\UNC\ prefix
using(SafeFindHandle findHandle = Kernel32.FindFirstFile(@"\\?\" + directory + @"\*", out findData))
{
if (!findHandle.IsInvalid) {
do {
if ((findData.dwFileAttributes & FileAttributes.Directory) != 0) {
if (findData.cFileName != "." && findData.cFileName != "..") {
folders++;
int subfiles, subfolders;
string subdirectory = directory + (directory.EndsWith(@"\") ? "" : @"\") +
findData.cFileName;
if (level != 0) // allows -1 to do complete search.
{
size += RecurseDirectory(subdirectory, level - 1, out subfiles, out subfolders);
folders += subfolders;
files += subfiles;
}
}
}
else {
// File
files++;
size += (long)findData.nFileSizeLow + (long)findData.nFileSizeHigh * 4294967296;
}
}
while (Kernel32.FindNextFile(findHandle, out findData));
}
}
return size;
}

浙公网安备 33010602011771号