there's a hard disk from which dd can read some blocks and it fails after about 7.2MB of read. then it fails even if it reads again from first. i don't know what happens after this that causes me to unplug the hard disk and plug it again. but this time can't continue. i didn't find an option for dd to begin from where it had failed. it begins from the first and leads to the same result.
for this, i thought to write a program to read absolute sectors from the hdd regardless of its file system and regardless of whether it's a block device. i thought to write a program to read from the hdd sector by sector and write to another one (i've a free hdd) the sectors i've read. the program may output which sectors it could read and may retries. it may get from which sector it begins. it's a sever manual process, but my data worth.
for this, i need to know how can i do this preferably under linux. if C# maybe a better choice, i will write the program in Windows with this language. but i don't know also how to do it in C# too.
i remember when we were programming in DOS, there were absread and abswrite functions. i don't know how to do it nowadays.