In a distributed computer system files are shared by both local users and remote users for query and update purposes. A user performing data processing activities tends to reference the same file for some time. When the referenced file is stored remotely, large amounts of communication traffic will be generated. For example, when a customer is making a travel plan, an airline reservation database might be accessed repeatedly by a remote operation site. The inquiries will probably all be made within the time of an ordinary telephone conversation. In many recent developments in distributed computer systems, file migration operations are incorporated into the procedures for processing remote file access requests. Using file migration operations a file may be duplicated or moved to the requesting site in order to reduce communication traffic. As a result, the system is faced with dynamic file placement decisions using a file migration policy. In particular, a file migration policy is expressed as the IF-THEN rules that specify the file migration operations to be implemented at each viable system state. Based on this policy, file migration operations are triggered when the specified conditions are satisfied, and thus dynamically respond to system needs. Because of the dynamic behaviors of systems, the problem of deriving effective file migration policies is extremely complex. An elaborate analysis is required. This paper studies the impact of file migration operations on system performance and develops automatic mechanisms for incorporating file migrations as part of system operations. The mechanisms include optimization models formulated in the form of Markov decision models for deriving optimal file migration policies at system design or redesign points, and heuristic rules to generate adaptive file migration decisions for individual file access requests. The trade-off between these two types of mechanisms is clearly that of performance levels versus implementation complexities. The optimization analysis not only generates the best possible solutions, but provides insight into the problem structure, whereas the rationale for developing heuristics is their simplicity in implementation and acceptable performance levels.