I can\'t think of any reasons why one is better than the other. Compare these two implementations:
public class MyClass
{
public MyClass(string fileName
The factory method is often used to hide the exact type of the object being created. An abstract class can have a static factory method, which then selects the concrete derived class to instantiate depending on some condition. Only the abstract base class is publicly documented. This leaves the library supplier some freedom to change the exact type being instantiated without breaking existing code.
An example from the .NET framework is the static factory methods on the Expression class.