Определить, что делают несколько строчек File IO на C

kruzer25

Имеется два куска кода:
SetEndOfFile(handle, ByteOffset):
offset.QuadPart = ByteOffset;
if (!SetFilePointerEx(handle, offset, NULL, FILE_BEGIN {
return GetLastError * -1;
}

if (!SetEndOfFile(handle {
return GetLastError * -1;
}

SetAllocationSize(handle, AllocSize):
if (GetFileSizeEx(handle, &fileSize {
if (AllocSize < fileSize.QuadPart) {
fileSize.QuadPart = AllocSize;
if (!SetFilePointerEx(handle, fileSize, NULL, FILE_BEGIN {
return GetLastError * -1;
}
if (!SetEndOfFile(handle {
return GetLastError * -1;
}
}
} else {
return GetLastError * -1;
}

Я вл всех этих извращённых файловых функциях с миллионом аргументов ни бум-бум, разобраться с наскоку не удаётся, но понять, что тут происходит, всё-таки нужно :crazy:
Какой из этих кусков соответствует System.IO.FileStream.SetLength и чему соответствует другой?

Dasar

первый SetLength
второй делает SetLength только в сторону уменьшения

kruzer25

То есть, в своей реализации я могу и в первом, и во втором просто написать SetLength(ByteOffset SetLength(AllocSize)?
Спасибо.

kruzer25

То есть, в своей реализации я могу и в первом, и во втором просто написать SetLength(ByteOffset SetLength(AllocSize)?
Да, вроде бы, на простых примерах всё работает правильно, но хотелось бы знать наверняка...

kruzer25

Поспрашивал тут ещё у людей на работе; я правильно понимаю, что это:

public void SetLength(long newLength) {
this.stream.Seek(newLength, SeekOrigin.Begin);
}

public void DecreaseLength(long newLength) {
if(this.stream.Length > newLength) {
this.stream.Seek(0, SeekOrigin.Begin);
this.stream.SetLength(newLength);
this.stream.Seek(0, SeekOrigin.End);
}
}


реализация тех же самых двух методов?

Dasar

реализация тех же самых двух методов?
да

kruzer25

Спасибо!
Оставить комментарий
Имя или ник:
Комментарий: